几篇分析好的文章:
http://www.pd521.com/thread-114-1-1.html xxoo
http://www.pd521.com/thread-113-1-1.html myoldid (回复,1,2,3)
进行软件的分析,这个过程就不需要多说了,大家自己看就是了,下面是分析完毕后的思路进行。
细节方面不再叙述:
smali层关键点:
native层关键点:
0x1:
修改smali层,将传入参数v0设置为int数值 1。
0x2:
针对这个apk来说,搜索默认显示的Normal User
等长度修改字符串,多余的不用空格补齐:
0x3:
确定好传入的参数,主要是R2,所以将R2与几个数字进行比较,所以将这个比较干掉它,也就是修改指令 00 00去替换掉,然后程序必须要走下面Gold Vip的流程了。
这里也可以改BNE为BEQ,效果一样,不过推荐用上面那个方式。
0x4:
核心参数是传入的R2,根据下面的汇编代码也可以看到,R2=1是关键点。
所以,我们在push指令完毕后,将后面第一个CMP 和BEQ修改掉。
Mov R2,#1 ,Nop .
因为直接修改的话,下面多个BEQ处理是无用的,所以直接Nop掉即可。
即 01 20 ,00 00
源码参考:
看完这个,再对比大家分析的so里面的显示效果,自然就明白了,可以简单总结下,so中遇到类似的情况,不是if else,就是switch。
<span style="font-size:18px;">JNIEXPORT jstring JNICALL Java_com_ggndktest1_JniGg_VipLevel (JNIEnv * env, jobject this,jint a) { int c=(int)a; const char* vip = ""; switch(c) { case 1: vip= "Gold Vip"; break; case 2: vip="Silvery Vip"; break; case 3: vip="Copper Vip"; break; default: vip="Normal User"; break; } return (*env)->NewStringUTF(env, vip); } </span>
本系列文章也受站长邀请,交由www.pd521.com首发。
时间: 2024-11-03 13:52:38