首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android DEX反编译后身分代码解析

2012-09-06 
Android DEX反编译后部分代码解析一个private 方法private String createBadgeCode()?.method private cre

Android DEX反编译后部分代码解析

一个private 方法

private String createBadgeCode()


?.method private createBadgeCode()Ljava/lang/String;
// Date now = New Date();
new-instancev2,java/util/Date
invoke-direct{v2},java/util/Date/; ()V

// SimpleDateFormat dateFormat = new SimpleDateFormat(”yyMMddhhmm”);
new-instancev5,java/text/SimpleDateFormat
const-stringv7,”yyMMddhhmm”
invoke-direct{v5,v7},java/text/SimpleDateFormat/; (Ljava/lang/String;)V

// StringBuilder raw = new StringBuilder();
new-instancev7,java/lang/StringBuilder
invoke-direct{v7},java/lang/StringBuilder/; ()V

// raw.append(dateFormat.format(now));
invoke-virtual{v5,v2},java/text/SimpleDateFormat/format; format(Ljava/util/Date;)Ljava/lang/String;
move-result-objectv8
invoke-virtual{v7,v8},java/lang/StringBuilder/append; append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-objectv7

// raw.append(difficulty);
igetv8,v12,tx/games/atd_world.difficulty I
invoke-virtual{v7,v8},java/lang/StringBuilder/append; append(I)Ljava/lang/StringBuilder;
move-result-objectv7

// raw.append(”tensaix2j”);
const-stringv8,”tensaix2j”
invoke-virtual{v7,v8},java/lang/StringBuilder/append; append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-objectv7

// Bytes[] rawbytes = raw.toString.getBytes;
invoke-virtual{v7},java/lang/StringBuilder/toString; toString()Ljava/lang/String;
move-result-objectv4
invoke-virtual{v4},java/lang/String/getBytes; getBytes()[B
move-result-objectv0

/* Below code refined;
int sum = 0;

for(int i = 0; i < rawbytes.length(); i++)
sum += rawbytes[i];
*/
const/4v6,0
const/4v3,0
l3c1e:
// length = rawbytes.length();
array-lengthv7

// if( v3 > v7 ) goto: l3c30
if-gev3,v7,l3c30

// v7 = rawbytes(v0);
aget-bytev7,v0,v3

// v6 += v7;
add-int/2addrv6,v7

// v3 ++;
add-int/lit8v3,v3,1
gotol3c1e

l3c30:

// StringBuilder badge = new StringBuilder();
new-instancev7,java/lang/StringBuilder
invoke-direct{v7},java/lang/StringBuilder/; ()V

// v8 = Math.random();
invoke-static{},java/lang/Math/random; random()D
nop
move-result-widev8

// v10 = 4652007308841189376;
const-widev10,4652007308841189376; 0×408f400000000000

// v8 = Math.round(v8*v10);
mul-double/2addrv8,v10

// I thought it only took one variable??
invoke-static{v8,v9},java/lang/Math/round; round(D)J
move-result-widev8

// v10 = 1000
const-wide/16v10,1000

// v8 += v10;
add-long/2addrv8,v10

// badge.append(v8);
invoke-virtual{v7,v8,v9},java/lang/StringBuilder/append; append(J)Ljava/lang/StringBuilder;
move-result-objectv7

// badge.append(dateFormat.format(now));
invoke-virtual{v5,v2},java/text/SimpleDateFormat/format; format(Ljava/util/Date;)Ljava/lang/String;
move-result-objectv8
invoke-virtual{v7,v8},java/lang/StringBuilder/append; append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-objectv7

// badge.append(difficulty);
igetv8,v12,tx/games/atd_world.difficulty I
invoke-virtual{v7,v8},java/lang/StringBuilder/append; append(I)Ljava/lang/StringBuilder;
move-result-objectv7

// badge.append(sum);
invoke-virtual{v7,v6},java/lang/StringBuilder/append; append(I)Ljava/lang/StringBuilder;
move-result-objectv7

// return badge.toString();
invoke-virtual{v7},java/lang/StringBuilder/toString; toString()Ljava/lang/String;
move-result-objectv1
return-objectv1
.end method

An example of the output of this function is; 1310090403121501473

Broken down the output looks like this;

1310090403121501473, (round(random * const)+1000

1310090403121501473, Date in yyMMddhhmm format.

1310090403121501473, “0″ Difficulty, Noob = 0, Normal = 1, Pro = 3

1310090403121501473, sum of bytes (date + difficulty + “tensaix2″)

?

?

热点排行