第一次独立使用frida解安卓题,没分析代码
Steps
- 
使用jadx打开apk分析主要代码
- 最主要的就是这个if判断了,安装apk后,有一个输入框和一个check按钮,会根据输入的结果Toast:Success or Failed。
 

- 
getSecret(getFlag()).equals(getSecret(encrypt(sInput))),判断getSecret(getFlag())和getSecret(encrypt(sInput))的结果是否相同,其中sInput是输入。 - 
getFlag()没有接收任何字符串,所以想到没必要分析代码写了什么,只需要看这个
getSecret方法的输入和返回是多少就可以,这里想到了frida。 - 
分析一下
getSecret方法- **
byte**[] hash = MessageDigest.getInstance(encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8)).digest(string.getBytes("UTF-8")); - 这一句对输入进行加密,加密方法还要通过
encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8)获取,写死的就证明加密也只是一个。这里开始想的是用frida看简单的输入的输出,判断是什么编码。 
 - **
 - 
frida函数
- 
jadx中右键
getSecret函数-复制为frida代码, - 
再加个Java.perform(function()运行函数
Java.perform(function() {
let MainActivity = Java.use("com.ph0en1x.android_crackme.MainActivity");
MainActivity["getSecret"].implementation = function (string) {
console.log('getSecret is called' + ', ' + 'string: ' + string);
let ret = this.getSecret(string);
console.log('getSecret ret value is ' + ret);
return ret;
};
}); 
 - 
 - 
打开frida-server
 

- frida-ps -U先查看当前运行的进程,然后找到相应的进行,进行frida
 - 具体可参考正己大佬的博客,《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上) - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
 

- 在手机上点击check按钮,查看log信息。
 

- 
比如012编码后的结果试一下就可以得出进行的md5编码。
 - 
然后可以看出getFlag()的返回是乱码,分析
getSecret(getFlag()).equals(getSecret(encrypt(sInput)))得出,getFlag()和encrypt(sInput))相等即可,而根据getSecret()的输入参数可知,这个过程仅仅对输入进行了ascii减一的操作,我们就可以对getFlag()的返回进行ascii加一的操作。 - 
得出flag的代码
s = 'ek
fz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|'
for i in range(0, len(s)):
print(chr(ord(s[i])+1), end='') 
 - 
用IDA动态调试应该也是可以的。