4.Android逆向分析方法
①字符串分析法
②日志分析法
③动态调试smali,动态调试so文件(c++生成的文件)
④API下断(调试so,对linuxAPI下断),栈回溯分析
也可以通过界面找到控件
5.字符串分析法-实例-破解一个apk的流程破解步骤
1.拿到apk
2.使用反编译工具进行反编译
3.根据apk运行提示,查找字符串
例子一
暴力破解
找密码
资源ID
smali基础语法
1.寄存器
p0 this
p1,p2..参数
v0,v1..局部变量
2.数据类型
在smali代码中数据类型以类型描述符来表示
①基本类型
int->l
float->F
boolean->Z
void->V
②引用类型
String->Ljaval/ang/String;
int[]->[
int[]->[[
3.字段和方法表示
MainActivity类中的num(类型为int)字段表示字段:所在类->字段名:字段的类型
Lcom/bluelesson/MainActivity;->num:l String类中equals方法
表示方法:所在类->方法名(参数类型)返回类型
Ljaval/lang/String;->equals(Ljaval/lang/Object;)Z
Android逆向工具-AndroidKiller介绍
AndroidKiller是一个集成了多个工具的逆向集合.包括:
①Adb,用于连接Android设备,安装重打包之后的apk
②Apktool,用于反编译apk,生成smali代码和解码后的xml文件,还要带有签名工具
其内部可以增加多个ApkTool版本,有一个修改版比较不错,ShakaApktool.jar
③Dex2jar,用于将dex哀件转为jar文件,方便java反编译工具反编译源码.除此之外,其还提供了很多Android文件格式相关转换的批处理.
④jd-gui,Java反编译工具界面版,可以反编译Jar文件生成Java源码
AndroidKiller中反编译出现问题的解决方法
一般反编译出错都是AndroidKiler中的apktool出的问题,所以解决方法有4:
1.更新apktool到最新版本
2.分析apktool的错误提示信息,进一步排错
3.如果没有明确的提示,就只能对照apktool源码进一步分析问题
4.如果还是无法反编译,就单独将apk中的dex文件拷贝出来,使用baksmali.jar反编译.修改完smali之后,先使用smali,jar汇编成dex文件再把dex替换到apk中,重新签名
Android逆向-日志分析法-破解收费金币
1.简单替换paySuccess里的到payFailed里边
保存重新编译,运行后弹窗,支付失败,但是购买成功——》获得金币
2.改OrderFinish购买成功
保存重新编译,运行后弹窗,支付失败,购买失败,但是——》获得金币
3.去掉弹窗
更换思路
4.弹出土司显示”大牛送你金币”
由以上可知order方法是破解该游戏的关键
弹出土司需要交给界面来处理,而order里边有sendMessage函数,可以发消息,1004这些应该就是消息ID
保存重新编译,运行后,弹出“大牛送你金币”,——》获得金币
注意:
修改代码时,可以直接在order里边自己写土司信息吗?
最好不要,它是与界面相关的,应该在主界面里边操作。ordr方法里边发消息,它很有可能是线程操作,应该在发消息的那个地方更改,不要去操作界面了,安卓里边约定俗成的规则:界面操作是不能在线程里边操作的,必须在主线程里边操作
加代码最好不要超过三行,超过三行就应该封装成一个函数
5.启动界面弹出“水哥捕鱼达人”
快速添加函数的方法: