|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
作者:啊cr 【文章标题】: PE+DIY 打造电子书反编译工具 系列1 【文章作者】: 啊CR/FTSTT 【作者主页】: Viper.68ab.com 【软件名称】: 某e书工具 【下载地址】: 自己搜索下载 -------------------------------------------------------------------------------- 【详细过程】 信息时代电子书作为一种暂新的媒体出现在我们面前,与以往的纸质书籍不同,电子书籍具有独特的魅力,比如复制文字、自由添加注释,全文搜索 等等。 大量的电子书的出现也带来了反编译电子书的问题,人们处于各自的目的都希望获得电子书的源文件,比如为了加以修正或更改格式,所以就出现了电子书反编译工具。 目前的电子书软件很多,但是相关的反编译工具就相对较少了,一些工具还是收费的。所以就有了本文。 本文的基础是ie内核的exe电子书需要将文件还原为ie可识别的数据流才能显示的弊端,所以我们就可借此将文件流输出到文件中获得原始文件(通常是原始文件)(可以参看马健的《常见电子书格式及其反编译思路》)。 作为本系列的第一篇,先捡个软柿子。 Activ E-Book 4.22 本程序所编译的电子书在运行时生成临时文件,所以修改起来就非常简单。 检查一些软件的输入表 在 _lcreat 处下断 00416928 6A 02 push 2 文件属性,改为push 0 正常属性 0041692A 56 push esi 0041692B FF15 78124000 call dword ptr [<&KERNEL32._lcreat>] ; kernel32._lcreat 00416931 8BF0 mov esi, eax 00416933 83FE FF cmp esi, -1 00416936 74 13 je short 0041694B 00416938 FF7424 0C push dword ptr [esp+C] 0041693C 57 push edi 0041693D 56 push esi 0041693E FF15 7C124000 call dword ptr [<&KERNEL32._lwrite>] ; kernel32._lwrite 00416944 56 push esi 00416945 FF15 50134000 call dword ptr [<&KERNEL32._lclose>] ; kernel32._lclose 上面是生成临时文件的代码 0041691B /74 0B je short 00416928 改为jmp 都不加密 0041691D |8B5424 0C mov edx, dword ptr [esp+C] 00416921 |8BCF mov ecx, edi 00416923 |E8 92A80100 call 004311BA 向上看 对图片的判断 因为技术原因软件无法动态调用图片所以图片不加密,那么就都不加密好了。 原来我以为临时文件是raw的压缩数据,显示时再跳到解压代码,现在知道了是解压后加密。。太简单了。 此时运行修改后的程序会发现三个问题: 1.文件含有前缀__enc_(方便程序识别但对我们来说带来麻烦) 解决方法 搜索字符串 "__enc_" 不含引号 在4131FC 处 找到 4131FC 处修改为hex:00 2.显示过的文件会被删除(删除解密后的文件,我在上步去掉了前缀,所以文件和解密后的文件相同会被删除) 下断点(删除文件) KERNEL32.DeleteFileA 004315B3 8B4D EC mov ecx, dword ptr [ebp-14] 004315B6 E8 9553FEFF call 00416950 004315BB 85C0 test eax, eax 004315BD 74 08 je short 004315C7 jmp 004315C7 跳过删除代码 004315BF 8B4D F0 mov ecx, dword ptr [ebp-10] 004315C2 E8 C7DFFFFF call 0042F58E 004315C7 8D4D F0 lea ecx, dword ptr [ebp-10] 004315CA C645 FC 01 mov byte ptr [ebp-4], 1 004315CE E8 535D0100 call 00447326 3.文件可能被解密代码破坏 下断点 _lopen 解码自然要打开文件 0043145D /74 7C je short 004314DB 0043145F |8BCE mov ecx, esi 00431461 |E8 EA54FEFF call 00416950 00431466 |85C0 test eax, eax 00431468 |75 71 jnz short 004314DB jmp 004314DB 跳过解码代码(加密文件已经不存在解码必定失败) 0043146A |53 push ebx 0043146B |6A 40 push 40 0043146D |57 push edi 0043146E |FF15 60124000 call dword ptr [<&KERNEL32._lopen>] ; kernel32._lopen 完成以上的修改就可以在程序运行时到临时目录中找到全部的文件了,其中有一些是电子书的固有文件删除即可。 顺便解决密码问题 密码 C:\WINDOWS\ANS2000.INI PasswordE= 004177E1 1AC0 sbb al, al ECX 密码 更深入的修改,可以写个程序进行动态修改代码,保存文件到指定目录。 至于如何应用到具体的文件上就很简单了,可以制作内存补丁或其他方法。 |
地主 发表时间: 07-06-27 09:47 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号