-
-
[原创]猿人学-APP逆向2022对抗赛第八题-upx
-
发表于:
2022-5-17 12:02
6337
-
[原创]猿人学-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();
}
|
比赛链接:467K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7s2m8E0j5i4c8U0K9q4)9J5k6i4W2#2j5h3&6J5k6h3&6^5N6h3g2Q4x3X3g2U0L8$3#2Q4x3V1j5`.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2022-5-17 16:34
被北辰清影编辑
,原因: