记一道逆向题
突然得到一道安卓逆向题,这就逝逝
题目要求
1.解出正确的用户名密码(10pts)
2.根据逻辑使用c语言恢复正向加密逻辑(15pts)
3.写出c语言逆向解密逻辑(15pts)
4.成功使用logcat捕获log信息(10pts)
5.借助log出来的信息完成对用户名密码的分析(25pts)6.通过修改文件逻辑让其自输出正确的密码(15pts)//出题人自己做不出来()
6,尝试绕过登录页面进入程序
7.wp能够清晰,详细的体现分析过程(10pts)
为了避免ai一把梭,从第二点开始。
test1,2,3
1,打开jadx,加载apk,我们发现LoginActivity,进一步寻找,发现lib文件ndk01。

2,将apk更改后缀名后解压,得到libndk01.so,放进ida,注意到左侧的login,跳转翻看伪代码。


3,通过图示分析,得到账户:CTFer,并且发现最后检验为s与v29

4,获取byte_6F0,分析变种rc4加密
1 | 加密 |
1 | 解密 |
得到最后的密码
test4,5
根据问题,打开AS,输入以下指令监听
1 | adb logcat -s JSnow |

接下来我们分析so层的核心加密
1 | do |
我们可以发现一件事,即对每一次循环而言,直接有关加密字符的其实就最后一步
那我们结合logcat,前面账号输错了我就说为什么没结果
1 | s[v19++] += *(v31 + (v22 + *(v31 + v18))); |
test6
我们也可以修改ida的汇编指令
注意到程序的log输出循环中的这一判定条件,对应的汇编指令如图所示,我们可以将jz修改为jmp(恒成立)

修改后的伪代码如图
这样当我们if条件成立时,我们可以直接得到”login success”的反馈
根据前面,我们得知,即输入的密码首字母加密后应该为7c,即密码明文首字母为0,这样就成功绕过登录判断得到结果了

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 yuoooka's home!
