注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火车的家

Put first thing first

 
 
 

日志

 
 

2012.10.07 回忆以前做过的逆向工程  

2012-10-07 21:53:30|  分类: 技术博客 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
下面对比 vc 或 gdb 来说明逆向工程。两者的区别是
1. 逆向工程的调试是以汇编语言为单位,vc 是以 c 语言语句为单位。
2. 逆向工程看到的变量是以寄存器和内存地址的形式出现的。
3. vc 以软件断点实现调试,参考 http://tassardge.blog.163.com/blog/static/1723017082012979483582/
逆向工程多了几个硬件断点,参考
http://tassardge.blog.163.com/blog/static/17230170820081121113434587/

我以前做的逆向工程多是提取软件的加密算法,比如提取某个文档加密算法。软件打开加密文档的时候,会提示用户输入密码,将用户输入的密码保存在buffer,加密算法读取这个密码并计算hash,之后与文档中保存的hash做比较,如果相同就说明密码正确。
逆向工程的时候一般都是在保存用户输入密码的buffer上设置一个read断点,一旦有代码读取这个buffer,程序就会停在读取buffer的代码处。这时有两种可能,一种是停住的代码就是加密算法,另一种可能是软件在做复制,仅仅是把密码复制到另一个buffer。如果是后一种情况,那么要在保存密码的新的buffer上设置read断点,然后重复上面的流程,直到找到加密算法为止。
但是很多软件会有反逆向工程的措施,我曾经遇到过的有两种:

1. 时间戳校验
这是一种反动态逆向工程的方法,目的是用来检测逆向工程工具设置的断点。原理很简单,就是在目标代码开头记录一个时间戳,然后在目标代码结束再记录一个时间戳,两个值相减得到的时间如果大于某个超时时间(比如600ms),就说明有人在两个时间戳之间设了断点,正在对代码做逆向工程,这时可以立刻采取措施,这样就能延缓代码被破解。

2. 反汇编陷阱(需要补充)
这是一种反静态逆向工程方法,目的是生成迷惑代码。

3. 脱壳
许多人专注于脱壳算法,其实没有必要,因为绕过壳的方法有很多。比如,可以在windows系统dll里面设置断点,当代码执行到这里会停住,然后因为代码最终还是要回到可执行文件,所以这时候只要不断地单步执行,退出windows的dll后,就自然能看到脱壳后的代码了。
  评论这张
 
阅读(375)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018