跟着鬼哥學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層關鍵點:




native層關鍵點:




0x1:


修改smali層,將傳入參數v0設置爲int數值 1

 

0x2:


針對這個apk來說,搜索默認顯示的Normal User



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



0x3:


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

這裏也可以改BNEBEQ,效果一樣,不過推薦用上面那個方式。




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



發佈了61 篇原創文章 · 獲贊 16 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章