现在的位置: 首页 > 综合 > 正文

信息安全第五次作业小结

2013年11月09日 ⁄ 综合 ⁄ 共 1029字 ⁄ 字号 评论关闭
文章目录

小结一下软件版权保护专题的作业。下面逐条介绍一下用到的技术

-----------------------------------------------------------------------------------------------------------------

1. TLS反调试技术

什么是TLS反调试技术请看下面一篇文章,讲得非常详细:

http://uzone.univs.cn/news2_2008_39971.html

可以在TLS回调函数中新开一个线程用来监视调试器。具体就是枚举窗口,查找调试器的窗口,一旦发现调试器窗口就退出自身进程,防止被调试。

破解方法也很简单,因为这种方法只能对付像OD,WinDbg这样比较老实的ring3调试器,对于XueTr这样的ring0级进程监视器毫无办法,监视线程可以简单地被干掉。

2. 动态验证口令

这个比较简单,就是随机生成一串字符串作为验证口令。作业要求最终要通过某种途径显示出自己的passkey,所以这个验证口令必须能被获取。所以我用了命令行参数。如果是以命令行启动的,参数为/f “路径”,则在对应路径下把验证口令写入文件。这样既能使对方无法通过社会工程学的方法猜解口令,又能满足作业的要求。

3. 口令验证

口令验证模块做了特殊处理。

首先,所有和用户交互的字符串都经过加密后以十六进制硬编码的方式存在全局变量中,这样能防止调试器和IDA这样的静态反汇编器反汇编出字符串常量而找到口令验证的代码段。仅在需要的时候解码字符串。

其次,在进入验证函数前先把解密字符串的密钥更改成其他值,只有在口令验证通过后才将密钥改回真实值。这样就能防止75则74的爆破,因为密钥不对,就算无条件跳转到验证通过的分支里也没法显示passkey。

4. MessageBox的特殊处理(仅针对此次作业)

借鉴inline hook的思路,将MessageBox的前几个字节复制到自定义的跳转函数中,执行完毕后再跳转到真实的MessageBox中,这样就能防止OD的模块间调用检查。因为OD的模块间调用检查的功能应该是看call后面的地址是否和已知的API地址匹配来确定调用的API的名字的。

-----------------------------------------------------------------------------------------------------------------

各位欢迎拍砖

抱歉!评论已关闭.