反编译源码笔记-注释 0

前言

由于导师的方向有Android安全内容,所以他给我看的论文大部分也涉及Android安全内容,但我之前完全没有基础,看的时候一头雾水。

所以请随意找到一本书并首先开始

书籍详细内容:Android软件安全权威手册

搭建环境

需求:分析APP

主要围绕:android软件开发、android软件逆向、android源码编译

安装JDK,安装AndroidSDK(使用AndroidStudio时已经自带,无需额外下载),安装AndroidNDK(同上),AndroidStudio集成开发环境,可以选择下载CMake、LLDB Android模拟器

Cygwin或BashonUbantuonWindows(win10下的linux子系统)

常用逆向分析工具搭建源码分析环境

推荐Win10,使用Docker编译系统源码

如何分析Android程序

从开发开始,学习路线是线性递进的,分析程序是开发的逆过程

从开发到最终分析破解的完整路线:

编译Android程序创建并编译

1.以命令行形式编译

进入项目目录目录内容如下

gradlew根据任务编译项目,执行gradlewtask命令,列出所有支持的任务

生成Debug调试版本的APK,在终端执行./gradlewassembleDebug命令反编译源码笔记,编译到app/build/outputs/apk中

安装Debug调试版本的APK,执行./gradlewinstallDebug命令,就会手动安装到连接的设备或者模拟器上

2.AndroidStudio编译

直接点击运行,Android Studio会手动编译APK并安装到设备上。 如果只想编译而不运行,点击Build->MakeProject编译当前工程。

破解一个Android程序破解启动

一般方法:使用ApkTool反编译APK文件,生成smali格式的反编译代码。 通过阅读smali文件的代码了解程序的运行机制,找到突破口,对代码进行修改。 使用ApkTool重新编译生成APK文件并签名,运行测试。

如此循环,直至全部破解。

在实际分析中反编译源码笔记,还可以使用IDAPro直接分析APK文件,使用dex2jar和jd-gui分析Java源代码级别等。

反编译

安装Apktool工具反编译APK文件

apktool d ./app-debug.apk -o outdir

反编译当前目录下的debug.apk,在outdir目录下生成文件

反编译包括一系列的目录和文件。 smali目录存放了程序所有的反编译代码,res包含了所有资源文件。 该目录下的子目录和文件的组织结构与开发一致。

分析

突破:错误消息

错误代码附近通常是程序的核心验证码。

错误信息属于Android资源中的字符串资源,可能是硬编码到源码中,也可能是在res/value/string.xml中

分析smali文件

调用checkSN()来检查注册码的有效性

move-result v0
if-nez v0, :cond_0

第一行将返回结果保存在v0寄存器中,第二行对v0寄存器进行判断。 如果其值不为0,即条件为真,则跳转到cond_0标号,否则程序继续执行。

如果代码不跳转,则继续执行

.line 34
iget-object v0, p0,  Lorg/nuaa/crackme0201/MainActivity$1;->this$0:Lorg/nuaa/crackme0201/MainActivity;
const v1, 0x7f06002c
invoke-static {v0, v1, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;II)Landroid/widget/Toast;
move-result-object v0
.line 35
invoke-virtual {v1}, Landroid/widget/Toast;->show()V
goto :goto_0

反编译源码笔记-注释 0

使用iget-object指令获取MainActivity实例的引用,其中->this$0是内部类MainActivity$1中的一个合成数组,它存储了父类MainActivity的引用。

constv1,0x7f06002c 指令将 v1 寄存器传递给不成功字符串的 id,调用 Toast;->makeText() 创建字符串,并在第 35 行显示它

改变小马里

关键在 if-nezv0,:cond_0

类似的跳转指令还有if-nez、if-eqz、if-gez、if-lez等。

if-nez的反义词是if-eqz,等于0时跳转

重新编译

更改代码后,重新编译并打包成APK文件

apktool b outdir_rel

此时编译生成的APK文件是未签名的,无法安装和测试。 APK 需要签名。

反编译源码笔记-注释 0

我没有按照书上的说明操作,我使用了360签名工具,链接在这里

签名密钥使用之前创建的

安装测试

启动Android模拟器,或者使用设备,直接在终端执行命令卸载原版,然后安装破解版。

$adb uninstall com.droider.crackme0201
Success
$adb install signed.apk
Success

重新开始测试发现已经破解了

概括

破解过程:

反编译->分析->更改->重新编译->签名

如果你觉得很长,可以使用集成工具

macOS:Android-Crack-Tool,Windows:AndroidKiller

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 反编译源码笔记-注释 0 https://www.wkzy.net/game/195156.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务