遇到了一道android题目,最近学了Unidbg。那么就开始掏出Unidbg,皮又痒痒了,想跳跳啦,看看能不能一把嗦
做完这题,发现成了Unidbg的铁杆粉丝,真的是很方便,我再也不用辛辛苦苦动态分析so啦题目会打包上传,完整Unidbg脚本也会放在后面,本文的重点在于使用Unidbg的分析so能力,关于Unidbg的安装可以自行搜索。
创建一个项目框架
使用aapt获得对应的启动Activity
aapt dump badging apk名字
开始分析代码
可以看到,重点是分析so的j和p方法
有两个so文件,先看app使用的libj.so
分析 libj.so
搜索JNI_onload,说明是静态注册函数
先分析 j 方法,发现没有参数,尝试使用Unidbg跑一遍(完整脚本在后面,这里不占用文章内容了)
int
__fastcall Java_an_droid_j_MainActivity_j(JNIEnv *a1)
{
i;
// r1
v2;
// r0
v3;
char
v5[
32
];
// [sp-40h] [bp-70h] BYREF
_BYTE v6[
36
// [sp-20h] [bp-50h] BYREF
JNIEnv *v7;
// [sp+4h] [bp-2Ch]
*v8;
// [sp+8h] [bp-28h]
v9;
// [sp+Ch] [bp-24h]
v10;
// [sp+10h] [bp-20h]
_BYTE *v11;
// [sp+14h] [bp-1Ch]
v12;
// [sp+1Ch] [bp-14h] BYREF
v8 = &v12;
v7 = a1;
for
( i = -
1178200092
; ; i =
52119689
)
do
v3 = i;
i =
1445388760
;
}
while
( v3 == -
);
if
( v3 ==
break
v11 = v6;
strcpy(v5,
"FlagLostHelpMeGetItBack"
v10 =
30
v9 =
97
29
] =
0
*(_WORD *)&v5[
27
24
25
80
qmemcpy(v6, v5, 0x1Eu);
v2 = (
)(*v7)->NewStringUTF(v7, v6);
*v8 = v2;
return
public
String func_j(){
DvmClass dvmClass=vm.resolveClass(
"an.droid.j.MainActivity"
DvmObject> object = dvmClass.newObject(
null
DvmObject> object1 = object.callJniMethodObject(emulator,
"j()Ljava/lang/String;"
object1.getValue().toString();
就说这个函数其实并没有什么用,总是返回固定值!
这里可以使用葫芦娃大佬的插件,Obpo(ca8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6G2j5Y4m8G2i4K6u0V1M7s2u0G2K9X3g2U0N6q4)9J5c8X3!0T1M7r3!0Q4x3X3c8H3L8s2g2Y4K9h3&6Q4x3U0W2Q4c8e0u0Q4z5o6m8Q4z5p5t1`.
使用插件来进行恢复即可(详细使用开看Obpo文档)
耐心等待
[注意]看雪招聘,专注安全领域的专业人才平台!
zchuang Obpo现在好可以使用吗?