天天看点

跟着鬼哥学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首发。

继续阅读