-
-
[原创]猿人学-APP逆向2022对抗赛第八题-upx
-
发表于:
2022-5-17 12:02
5875
-
[原创]猿人学-APP逆向2022对抗赛第八题-upx
1、抓包请求-根据抓包查看请求,参数只有一个s,直接使用jadx搜索app8看看是否能够定位到实现位置
2、可以看到根据app8搜索并定位到接口请求处,点击调用函数并查找用例
3、通过分析调用函数可以推断出,f5491OooO0O0为页数,在每次滑动时进行+1操作,通过data函数将页数当作参数传入,返回data值,最终通过OooO0oo函数进行调用
1 2 3 4 5 6 7 | public / * synthetic * / void lambda $initListeners$ 1 (o0000O o0000o2) {
int i = this.f5491OooO0O0 + 1 ;
this.f5491OooO0O0 = i;
String data = data(i);
o0O0O00.OooO0O0 oooO0O0 = this.f5492OooO0OO;
oooO0O0.OooOO0O(((o0O0ooO.OooO0O0) oooO0O0.OooOOO0(o0O0ooO.OooO0O0. class )).OooO0oo(data), new OooO0O0(o0000o2));
}
|
4、点击data函数,跳转声明,发现data是一个native函数
5、使用frida尝试调用data函数,根据返回值与请求值进行对比发现格式完全一致
1 2 3 4 5 6 7 | var ChallengeEightFragment = Java.use( 'com.yuanrenxue.match2022.fragment.challenge.ChallengeEightFragment' )
ChallengeEightFragment.data.implementation = function(){
console.log( "i = " + JSON.stringify(arguments[ 0 ]))
var result = this.OooOooo. apply (this, arguments);
console.log( "res = " + JSON.stringify(result))
return result;
}
|
6、由于比赛规则,所以使用unidbg进行so调用,发现调用失败,通过ida进行so文件分析,发现找不到JNI_OnLoad,突然意识到题目是upx
7、先确保so文件是经过upx压缩过的,使用ExeinfoPe查看文件信息,可以看到so文件确实经过了upx压缩处理
8、那么第一个想法就是解压缩,直接github下载upx工具进行解压缩,使用方法非常简单
1 2 | 进行解压缩操作,因为我是把so文件复制到同名路径下,所以不需要输入路径
upx.exe - d libmatch08.so
|
9、可以看到so文件解压缩成功了,文件由原来的约2M变成了4M左右,那么直接再次尝试通过unidbg调用data函数
10、可以请求到接口数据了,下面是部分udb代码
1 2 3 4 5 6 | public String getSign(Integer allParams) {
DvmObject<?> context = vm.resolveClass( "com/yuanrenxue/match2022/fragment/challenge/ChallengeEightFragment" ).newObject(null);
DvmObject<?> strRc = context.callJniMethodObject(emulator, "data(I)Ljava/lang/String;" , allParams);
System.out.println(strRc.getValue());
return (String) strRc.getValue();
}
|
比赛链接:https://appmatch.yuanrenxue.com/
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-5-17 16:34
被北辰清影编辑
,原因: