如何从EXE程序中提取隐藏源代码?

摘要:挑战软件逆向零基础入门--1分钟解密提取出隐藏在EXE程序中源程序真身。网上找的一个JAVA学习文档【《Java开发学习大纲文档》第六版】,知识汇总的非常全。 打开后的界面 这个界面明显是CHM文档,但是运行它的是个EXE程序,那就可能是被
挑战软件逆向零基础入门--1分钟解密提取出隐藏在EXE程序中源程序真身。网上找的一个JAVA学习文档【《Java开发学习大纲文档》第六版】,知识汇总的非常全。 打开后的界面 这个界面明显是CHM文档,但是运行它的是个EXE程序,那就可能是被加密或打包了。本篇文章我们就把它源文档CHM找出来。 直接上调试器OllyDBG,将程序拖入。 点击调试器菜单上的M进入内存窗口,看到软件的区段来看大概率是没加壳和加密的。点击TEXT段右键反汇编 向下翻看到些对文件和目录的操作,猜测大概是用的什么脚本软件。在向下看到这么一段 00401340 |. 50 push eax ; /pWndClassEx = kernel32.BaseThreadInitThunk 00401341 |. C745 CC 30000>mov [local.13],0x30 ; | 00401348 |. C745 D0 23000>mov [local.12],0x23 ; | 0040134F |. 895D D8 mov [local.10],ebx ; | 00401352 |. 895D DC mov [local.9],ebx ; | 00401355 |. 897D EC mov [local.5],edi ; | 00401358 |. 895D F0 mov [local.4],ebx ; | 0040135B |. C745 F4 00B04>mov [local.3],学习文档.0046B000 ; |UNICODE "AutoIt v3" 00401362 |. 894D E4 mov [local.7],ecx ; | 00401365 |. C745 D4 24174>mov [local.11],学习文档.00401724 ; | 0040136C |. FF15 E0654600 call dword ptr ds:[<&USER32.RegisterClas>; \RegisterClassExW 0040135B |. C745 F4 00B04>mov [local.3],学习文档.0046B000 ; |UNICODE "AutoIt v3" AutoIt v3 是一种专为 Windows 系统设计的自动化脚本语言,主要用于模拟键盘按键、鼠标操作以及控制窗口和控件,以实现对图形用户界面(GUI)的自动化任务。它常用于软件安装、重复性桌面操作、系统管理等场景。 果然是对文件进行了包装。那直接分析下看它会不会把真实的程序CHM文件解密出来。尝试对WriteFile、CreateFile、CreateProcess、ShellExecute等API下断。上面搜索它就是个自动化脚本程序。猜测它肯定会对文件进行解压或运行。上面的断点可以都进行下断点跟踪试试。从查找字符串中看到里面的常量固定字符串用的是UNICODE编码。上面的下断点我们就用宽字节的API,在后面加个W即可。如CreateFileW,ShellExecuteW。回来调试器里,反汇编窗口中按下Ctrl+G 按下确定后来到函数头双击或按下F2,下断点。下完断点后F9运行程序。程序运行时CreateFileW会多次断下,我们一直按F9看有没有用的东西。 注意看堆栈窗口中,它在读这么一个文件?我们去这个目录下看看有没有。临时目录快速到达方法:打开运行窗口,输入%tmp%直接到达 搜索没有发现这么个文件,估计是没生成。返回调试器中继续F9,看到堆栈中它在创建这个文件了。继续F9,再次到临时目录查找 果然它解压出来了文件。但这个文件是TMP,又会是什么文件?用winhex查找看它的数据内容 看到数据开头是ITSF开头,不知道什么东西。丢百度试试: 以“ITSF”开头的格式通常指‌CHM文件格式‌,这是一种用于存储压缩帮助文档的复合文件格式,由微软开发。
阅读全文