-
-
[原创]抛砖引玉:Hook java方法,抵御静态破解!
-
发表于:
2014-4-11 22:21
7911
-
[原创]抛砖引玉:Hook java方法,抵御静态破解!
这篇文章是对上一篇文章的扩展。
http://www.kanxue.com/bbs/showthread.php?t=186054
在上一篇文章中我们实现了将一个非native方法在运行时处理成一个native方法,让虚拟机放弃原本的执行序列,转而去执行另外的执行序列。借于这一特性,我们可以使一份可执行文件反编译出来的代码呈现出另一种逻辑,而且对其的修改回编失去作用。
例如这一段java代码实现你的支付逻辑.
public boolean pay(int money)
{
this.wealth-=money;
return true;
}
如果我们在运行时将其hook,转而去执行另外一段native代码
JNIEXPORT jboolean JNICALL pay(JNIEnv *env, jobject jobj,jint money)
{
/* 此处是你真正的支付逻辑 */
return result;
}
这时候坏蛋们反编译时看到的执行栈就是第一段java代码,如果坏蛋们将其修改了我们也不怕,因为程序在运行时执行的是另外一段代码。坏蛋们的修改是无效的!
于是我们的代码得到了保护!
当然,如果坏蛋添加一个函数,将对上面方法的调用转到新加的方法,或者干脆注释掉对其的调用,那也没办法了。
(会(arm|x86|mips)汇编的)|(有IDA F5 for arm)老鸟别笑小子我,毕竟真正的破解和保护真的没有,拼的就是破解成本和保护成本!反破解这事,能把破解成本提高你就赢了!
说一下自我hook的方法,上一篇文章说的是跨进程进行代码注入,然后才进行Hook,那样的话是需要root权限的.但是如果想上面一样用来自我保护的话,就可以免去root 来注入自己的过程,可以直接将上一篇的需要注入到别的进程的代码直接放到自己的app编译,然后用JNI_OnLoad()将其执就行了.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课