易码技术论坛

 找回密码
 加入易码
搜索
查看: 252236|回复: 8

lava代码动态修改技术(反反向工程)

[复制链接]
发表于 2006-2-14 17:04:00 | 显示全部楼层
不错,UP。。
发表于 2006-2-14 17:26:00 | 显示全部楼层
可使代码几不可读吗?

无论如何都是会被反出来的.
发表于 2006-2-14 18:48:00 | 显示全部楼层
马甲泛滥啊~  Q***

用这个方法加入汇编在好不过了~~
发表于 2006-2-14 20:51:00 | 显示全部楼层
反编译的代码本身已经丢失了函数名,而且,Lava也没有什么大不了的安全问题-.-
楼主的方法会搞得Lava原本的一点点跨平台性丢失,这样弄出来的代码就是WQX only了。

不过貌似Lava也只在WQX上面有,呵呵。说起来,这些东西作为纯粹的理论研究,也不必过分探讨实用价值。
 楼主| 发表于 2006-2-15 14:49:00 | 显示全部楼层
那天看LAVA的SC时想到的 顺便提一下啦``

应该是只能在20K里用了 8K要用要改一下的

反正LAVA也就能在这里面用用了``嘿``
发表于 2006-2-15 15:06:00 | 显示全部楼层
很不错!
发表于 2006-2-15 17:59:00 | 显示全部楼层
有必要吗?
发表于 2006-2-16 14:30:00 | 显示全部楼层
把它用在goto上不是实现了switch了吗,很有实用价值的!
 楼主| 发表于 2006-2-14 16:48:51 | 显示全部楼层 |阅读模式

[face=楷体_GB2312]此文献给乖的媛儿~~~
祝她情人节快乐!!!![/face]





lava程序是编译出来的lava字节指令码的集合 和非解释语言编译出来的代码一样,它也可以被反汇编,不同的是,其指令码是虚拟CPU的指令码(LAVA(起码一代)并非严格意义上的虚拟机``说是虚拟CPU``还很勉强 嘿嘿``)。从而被破解或是得到源代码。由于LAVA指令字节码已被sippey等人公布,所以反汇编lava程序成为一件很简单的事``从而LAVA的安全性几乎不存在了```
以下用动态指令修改的方法来保护lava的代码````
由于lava是将lava字节码逐句载入到内存的缓冲来执行 所以直接修改比较复杂 这里用修改跳转表的方法来修改
lava1.0的代码和解释器存在与同一内存空间中
因此可以使用*语句来对解释器代码里的跳转表来进行修改
保证可以在lava20k的机器上用
8K的就不知道了``


void main()
{
int i;
int tp1,tp2;
int tbl1;
tp1=0;
tp2=0;
for (i=32768;tp1!=0xAA || tp2!=0xBD;i++);
{

tp1=*i;
tp2=*(i+1);

}
tbl1=*(i+2)+*(i+3)*256;
//invert "printf" code
//"printf" code=82h
*(tbl1+0x81*2)=*(tbl1+0x81*2);
*(tbl1+0x81*2+1)=*(tbl1+0x81*2+1);
//modify jump address

printf ("Alv");

}

编译完后用WINHEX对指令码进行查看``找到如下指令码

hex:8240     
查指令表可知这里是
printf("Alv")编译出来的
那么改
82为81
则为8140
保存

这段代码仍然正常运行~
不过以后的getchar()指令将不能正常工作
若要正常工作,定义变量sa,sb,并在modify前加入:
sa==*(tbl1+0x81*2);
sb==*(tbl1+0x81*2+1);
printf后加入
*(tbl1+0x81*2)==sa;
*(tbl1+0x81*2+1)==sb;
即可
这样 反向工程时查看代码会误以为这里是getchar,而不是printf了
当在代码中大量使用此技术时,可使代码几不可读``达到反反向工程的目的
``````



您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-7-9 12:40 , Processed in 0.011832 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表