`

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

阅读更多

一个private 方法

private String createBadgeCode()


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

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

// StringBuilder raw = new StringBuilder();
new-instance v7,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-object v8
invoke-virtual {v7,v8},java/lang/StringBuilder/append ; append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v7

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

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

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

/* Below code refined;
int sum = 0;

for(int i = 0; i < rawbytes.length(); i++)
sum += rawbytes[i];
*/

const/4 v6,0
const/4 v3,0
l3c1e:
// length = rawbytes.length();
array-length v7

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

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

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

// v3 ++;
add-int/lit8 v3,v3,1
goto l3c1e

l3c30:

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

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

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

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

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

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

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

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

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

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

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

// return badge.toString();
invoke-virtual {v7},java/lang/StringBuilder/toString ; toString()Ljava/lang/String;
move-result-object v1
return-object v1
.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″)

 

 

分享到:
评论

相关推荐

    android dex jar 反编译工具集合

    Apktool不仅支持.dex反编译,还能处理资源文件,如XML布局、图片等。通过Apktool,开发者可以查看APK的资源结构,修改语言字符串,甚至重构应用的布局。使用Apktool需要一定的命令行操作经验,但它的文档丰富,社区...

    apk反编译dex反编译

    总结来说,"apk反编译"和"dex反编译"是Android逆向工程的重要组成部分,它们有助于开发者理解和修改APK,同时也为安全研究人员提供了分析潜在恶意行为的手段。在进行这些操作时,应遵循合法性和道德性原则,确保使用...

    android反编译工具(dex2jar,apk2java)

    本文将详细介绍两款常用的Android反编译工具——dex2jar和apk2java,以及如何利用它们获取APK中的Java源代码和资源文件。 一、dex2jar dex2jar是一款将Dalvik字节码(.dex)转换为Java字节码(.jar)的工具。...

    反编译classes.dex工具

    在Android世界里,反编译`classes.dex`文件通常用于分析APK的源代码结构、功能实现或者对APK进行定制和修改。 在这个压缩包中,我们有以下四个关键文件: 1. **反编译.bat**:这是一个批处理文件,它可能包含执行...

    破解器dex反编译文件

    根据提供的文件信息,本文将对“破解器dex反编译文件”的相关知识点进行详细解析。 ### 一、DEX文件简介 #### 1.1 DEX文件格式 DEX(Dalvik Executable)是一种专为Android平台设计的字节码格式。与Java的class...

    android反编译软件dex2jar反编译软件dex2jar

    `dex2jar`正是为了桥接这两种格式,使得开发者可以利用Java反编译工具(如JD-GUI或ProGuard)查看和分析Android应用的原始Java源代码,尽管这个过程可能会丢失一些原始的源代码结构和注释。 `dex2jar`的工作流程...

    dex反编译工具jadx

    【dex反编译工具jadx】是一款高效且易用的Android Dex文件反编译工具,专为开发者设计,便于分析和理解APK或Dex文件的内部结构和代码逻辑。JADX以其强大的功能和直观的界面,使得Android应用的逆向工程变得更为简单...

    Android反编译工具包(最完整的Android反编译工具包)

    标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...

    android apk 反编译 dex2jar

    除了dex2jar,还有其他工具可以用于APK的反编译,如Apktool用于解析资源文件,Smali用于查看和修改DEX文件的汇编代码,以及 Frida 和 Xposed 用于动态分析和注入代码。 总之,APK反编译是Android逆向工程的一部分,...

    Android反编译工具dex2jar

    - **代码混淆**:使用ProGuard或R8工具对代码进行混淆,这会重命名类和方法,使反编译后的代码变得难以理解。 - **资源加密**:对敏感的资源文件进行加密,只在运行时解密,减少数据暴露的风险。 - **使用Native ...

    Android 反编译工具 dex2jar

    - **JD-GUI**:一个图形化工具,可以直接打开`.jar`文件查看反编译后的Java源代码。 - **Apktool**:除了`dex2jar`外,另一个常用的Android反编译工具,它可以解包APK,还原资源文件和XML布局,但不处理.dex文件。 -...

    Android app反编译工具(dex2jar-2.0.zip apktool_2.4.1.jar jd-gui-1.6.6.jar)

    在Android应用开发的世界里,有时候我们可能需要对已有的APK文件进行反编译,以了解其内部工作原理、查看源代码或者进行二次开发。在这个过程中,一些专业的工具显得尤为重要。这里提到的三个文件——dex2jar-2.0....

    Android反编译工具

    在Android应用开发的世界里,有时候我们可能需要对APK文件进行反编译,以了解其工作原理、查看源代码或进行安全分析。标题为“Android反编译工具”的压缩包包含了一系列用于Android应用反编译的实用工具。下面将详细...

    android反编译工具

    配合dex2jar使用,可以快速浏览和理解反编译后的Java源代码。 4. **Smali/baksmali**:Smali是一种低级别的Dalvik虚拟机汇编语言,而baksmali是它的反汇编器。通过将DEX文件转换为Smali代码,我们可以更深入地了解...

    APK+Dex文件反编译及回编译工具

    总的来说,APK和Dex文件的反编译与回编译是Android开发中的高级技能,涉及到Android应用的结构、字节码解析、资源处理等多个方面。理解这一过程对于学习Android系统的工作原理、提升应用安全性或者进行二次开发都有...

    Android反编译软件 安卓反编译 Android APK反编译详解

    在Android开发领域,有时我们需要对APK文件进行反编译以了解其内部结构、源代码逻辑或进行二次开发。本文将深入探讨Android反编译的相关知识,包括为什么要进行反编译,常用工具介绍,以及反编译过程的详细步骤。 ...

    android反编译工具包apktool+dex反编译class

    此外,由于反编译可能会导致代码混淆,有些部分可能难以理解,这需要开发者具备一定的逆向工程知识和经验。 在进行反编译时,开发者应保持尊重他人的知识产权,遵循软件许可协议,并且理解这可能触及到的道德和法律...

    Android一键反编译

    在Android开发领域,有时我们需要对APK文件进行反编译以了解其内部结构、源代码或进行二次开发。"Android一键反编译"是这样的一个工具,它简化了原本复杂的过程,让开发者和逆向工程师可以更高效地探索APK的内部工作...

Global site tag (gtag.js) - Google Analytics