论坛: 编程破解 标题: [转帖]PE+DIY打造电子书反编译工具1 复制本贴地址    
作者: 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号