作者CMJ0121 (不要偷 Q)
看板NetSecurity
标题[闲聊] 2017.W24 - 逆向工程 (Reverse Engineering)
时间Wed Jun 14 07:54:05 2017
2017.W24 - 逆向工程 (Reverse Engineering)
> 微下-击爆-流 听起来就很像中二的招数名称
## 前言 ##
之前曾经为了公司上的事情 特别研究了逆向工程
最後发现... 只要有心都是可以逆向了
然後这个天气真的很好睡 不知不觉... 就睡着了呢
## 内容 ##
逆向工程[0] 是一种技术:透过将原本的产品透过逆向分析,而找出原本产品的制造与处理过程
在软体的世界中 逆向工程就是透过各种神奇的手法
分析并理解程式的逻辑 最终找出其中的关键处并加以修改
可以从游戏破解[1] 私服[2] 找到其中的地下商机
在我之前的研究中 逆向工程会大致分为两类:静态分析、动态分析
静态分析也就是不需要将程式执行 只需要直接分析档案的内容 (机械码)
现在绝大多数的软体都运行在 x86-64[3] 的环境 相关的携械码-组合语言对应也容易找到
因此将一个软体反组译[4] 成组合语言是相对容易的
防治反组译的手法有若干种 其中最有效的方式则是利用加壳
加壳技术的概念 则是利用在原本的程式中再叠加一个程式来混淆[6]原本的程式逻辑
用一个简单的概念:
1. 原本的程式可以先用 Huffman Coding[7] 先行压缩
2. 主程式开始的逻辑则是一个 Huffman Decoder
3. 运行的时候则需先跑完整的 Decode 流程才能够执行程式
这种加壳技术 目的在於将静态逆向的难度 再叠加一层需要破解加壳的运作逻辑
想当然 这种防止逆向工程的技术并没有从根本解决
同样的 动态分析则是在程式运作的时候 透过除错器[8] 分析程式的运作流程
这种分析的优点在於可以即时的修改程式的所有内容 包含资料、执行流程等
常见的除错器包含 GDB[9]、WinDBG[10]
运作的方式都是利用系统本身提供的系统指令来做动态除错
针对动态分析的防止方法则是利用 Anti-Debugging[11]
透过若干手法 让程式本身判断是否处於 Debugger 的状态下
[0]:
https://zh.wikipedia.org/wiki/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B
[1]:
https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E6%9C%BA
[2]:
https://zh.wikipedia.org/wiki/%E7%A7%81%E4%BA%BA%E4%BC%BA%E6%9C%8D%E5%99%A8
[3]:
https://zh.wikipedia.org/zh-tw/X86-64
[4]:
https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%B7%A8%E8%AD%AF%E5%99%A8
[5]:
https://zh.wikipedia.org/wiki/%E5%8A%A0%E6%AE%BC%E5%A3%93%E7%B8%AE
[6]:
https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86
[7]:
https://en.wikipedia.org/wiki/Huffman_coding
[8]:
https://zh.wikipedia.org/wiki/%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7
[9]:
https://www.gnu.org/software/gdb/
[10]:
http://www.windbg.org/
[11]:
https://en.wikipedia.org/wiki/Debugging#Anti-debugging
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.122.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/NetSecurity/M.1497398049.A.ACD.html
1F:推 FireGenie: 怎麽没有提到 IDAPro 跟 OllyDbg. 06/14 17:35
2F:→ CMJ0121: 因为需要钓鱼 看哪位大大想要讲啊~ 06/14 17:41
3F:→ FeiYao: 楼上就是大大惹,快讲快讲 06/15 09:44
4F:推 Peruheru: OllyDbg我也有兴趣,谢谢一楼大大 06/21 17:25
5F:→ skycat2216: 记得没错的话加壳好像也会堆叠机械码。 08/12 10:09