首页
社区
课程
招聘
[原创]抛砖引玉:Hook java方法,抵御静态破解!
发表于: 2014-4-11 22:21 7911

[原创]抛砖引玉:Hook java方法,抵御静态破解!

2014-4-11 22:21
7911
这篇文章是对上一篇文章的扩展。
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直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
嗯。赞连载。
2014-4-11 22:23
0
雪    币: 6690
活跃值: (4667)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
如果可以Hook .Net的方法就好了
2014-4-12 09:53
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
.net好像不好做了,有那虚拟机的代码吗?
2014-4-12 16:28
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
代码反编译后一扔到工程里就能看出端倪
2014-4-17 10:04
0
游客
登录 | 注册 方可回帖
返回
//