安卓逆向第一篇:破解某新闻app
2019-12-11 本文已影响0人
萌木盖
貌似是啥app不让说,但是要是用心的话应该看图能知道是哪个app。
技术点:
- frida
- jadx(本文还用的1.0版本,推荐1.1.0(贼香)。下载链接)
- ida
首先肯定是抓包:

这里sn为关键点。还不知道怎么来的。应该是用了某种加密算法。
用Frida hook所以加密算法看看行不行
hook的js代码<----点这里看代码。
代码改一下包名就完事,包名获取方法请百度,方法一堆。
然后果然能hook到。(因为刷新获取的,所以值已经变了。)

然后向上翻堆栈就能找关键的代码。

这个时候再用jadx打开apk,直接搜索
digest
,或者找big.b
这个类。
此时我们再看看传入参是啥就好了。
frida去hook传入参
js code:
# 方法是显示堆栈用的
function showStacks() {
Java.perform(function () {
send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
});
}
Java.perform(function () {
// Function to hook is defined here
# 不带包名defpackage,因为带上找不到,而且堆栈那里也不显示他
var http = Java.use('big');
# 重载方法所以用overload
http.b.overload('java.lang.String').implementation = function (a1) {
send("start");
send("参数1:"+a1);
var result = this.b(a1);
send("结果:"+result);
send("end");
return result;
};
});
运行后得到:

看到只有一个是,
当然这无所谓,
说明被调用了很多次,只有那一次是刷新的时候用的。
但是发现传入参数有几处一样的。
然后我们找传入参数。
找传入参
右击这个函数点查找用例
。

是这样的:

除了最后一个是本函数,调用的地方还有三处。
看本文第三张图,就是打印堆栈的那个。就知道是那个
a.a
的是上层调用了。

点进readMD5key
:

然后把本apk文件解压或者直接用压缩软件打开。

放到IDA之后。

长这个样子:

然后按
F5
或者TAB
键。一路点确定,如果不行那你就是用了64位的IDA,换成32位的就可以了。
此时反编译的还不准确。我们加载一下IDAjni.h,其实不加也行。
找教程和点h文件方法,前几篇都可以。

然后右击传入参。

然后改成JNIEnv* a1
,就可以了。
至于为什么,你可以这样百度

此时代码就变成了:

右击然后点这个

就好看多了。


之后:

这样就很明了了。
就是获取结尾那个字符串。跟frida那个传入参的结尾一样。
后面也没啥难度了,就看查找用例。然后翻代码就会发现。
sn=md5(版本号+proid+uid+时间戳+随机数+so里的字符串)
结束!