天天看點

跟着鬼哥學so修改,三,答案篇

幾篇分析好的文章:

http://www.pd521.com/thread-114-1-1.html     xxoo

http://www.pd521.com/thread-113-1-1.html    myoldid  (回複,1,2,3)

進行軟體的分析,這個過程就不需要多說了,大家自己看就是了,下面是分析完畢後的思路進行。

細節方面不再叙述:

smali層關鍵點:

跟着鬼哥學so修改,三,答案篇

native層關鍵點:

跟着鬼哥學so修改,三,答案篇

0x1:

修改smali層,将傳入參數v0設定為int數值 1。

0x2:

針對這個apk來說,搜尋預設顯示的Normal User

跟着鬼哥學so修改,三,答案篇

等長度修改字元串,多餘的不用空格補齊:

跟着鬼哥學so修改,三,答案篇

0x3:

确定好傳入的參數,主要是R2,是以将R2與幾個數字進行比較,是以将這個比較幹掉它,也就是修改指令 00 00去替換掉,然後程式必須要走下面Gold Vip的流程了。

這裡也可以改BNE為BEQ,效果一樣,不過推薦用上面那個方式。

跟着鬼哥學so修改,三,答案篇

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首發。

繼續閱讀