以前都是写csdn,被lin大佬催来更新一篇app逆向方向的文章。第一次写app方面的文章,写的不太好,希望大家多多包涵。
话不多说直接开干。
1.环境依赖
1.1 jadx
1.2 ida
1.3 frida
1.4 android_server
2.流程分析
打开app映入眼帘的就是
我们这次的目标就是将这个密码分析出来。
当我们随便输入一个错误的密码的时候,我们看见
出现了个验证码校验失败。。。我们就从这个字眼入手。
3.加密分析(静态调试)
我们打开jadx全局搜索“验证码校验失败”这个字段
真好,只有一个,我们点进去。
静态分析一下 ,主要执行onclick这个方法 ,如果它满足if条件判断里面的东西,那么就不会走“验证码校验失败”这条路,那我们可以猜测这样if判断里的是判断输入的密码和真实密码是否一致。
我们跟一下securitycheck这个方法
我们看见他是有native的,那么很明显他的逻辑是在so层进行的。
那我们没办法只能进行ida调试调试。
要进行so调试我们第一步就是反编译将so文件拿出来。反编译第一步就
是看app有没有壳,真好这个app没有加壳,我们直接使用apktool将apk
反编译拿出so文件
真好只有一个so文件,然后我们用ida先静态分析一下这个so文件。
然后搜索那个方法
真好,搜得到,我们点进去
都是一些指令集,我们按F5转化为伪c代码方便阅读。
还好代码长度不多,我们慢慢阅读。
他整个函数只会走两个地方返回一个reurn 0 一个 return 1
我们先看最后一个if
if (!v7) 他就返回v8 而v8在上面定义了等于1 那么我们就看v7
v7 在第二个if出现了 他是和v5 进行判断,而v5是上面
而GetStringUTFChars这些是java方法,既然v5调用了java的代码我们可以猜测v5就是我们输入的密码,他又在和v7 比较 那我们可以判断v7就是真实密码
而v7又由v6来 v6又等于off_628C
我们没有办法找到off_628C这个来源,静态调试到此就结束了。我们分析出off_628C这个就是真实密码,那我们接下来就用动态调试来获取这个值。
4.加密分析(动态调试)
1.启动android_server
端口转发
然后启动ida选择go
在这个里面现在自己的配置,我是真机 我选的arm的。
然后点ok,然后ctrl+f搜索app的包名,点进去
进来后,ctrl+s搜索so文件名
切记一点要选择有x的 。
我们看见so文件的地址为b4037000,
这个时候我们在打开看看刚刚静态调试的ida
看见我们需要hook的函数偏移量为000011ab
那么这个函数在app里的地址为
点g键跳到这个地址
然后我们f7单步跟发现一一直会app崩溃,我们猜测这个app加了反调试,
我们hook他的onload方法
发现他是监测Tracerpid==1
我们使用frida来hook这个pid
然后在执行上面的步骤重新运行ida
然后f7 单步运行
看到密码了aiyou,bucuoo
我们去试试
完美
这次的分析就写到这里了下次我们在分析个多重监测反调试的app吧