幾篇分析好的文章:
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首發。