首页
社区
课程
招聘
有谁知道unebookedit的所有反跟踪手段?
发表于: 2004-9-6 00:10 5047

有谁知道unebookedit的所有反跟踪手段?

2004-9-6 00:10
5047
好久没练兵,变的狂菜~~~~~~~~~~~~~~~~~~~~~
我只知道是UPX的壳,不好脱,脱完了后用CreateFile有自效验,还用FindWindow查找ProcDump,w32Dasm,Trw,WinHex,会不断检测DEDE,如存在则强迫关闭,修改DEDE的窗口标题和文件名均无效,用DEDE反编译,找不到任何窗体、过程信息,查找OllyDBG,用修改版OllyDBG可躲过,运行时不断产生INT3异常和单步异常,某些指令好象步过就会产生无法处理的异常。。。。
挺有意思的,有人弄过吗?他的壳是怎么改的?如何不断用INT3和单步异常来反调试的?

这个软件太恶心了,只会用黑名单。听说作者停止开发了?这样还好
所有黑名单都是以加密方式放在字符串资源里的,这样,咱只要把里面的字符串资源乱改一气就搞定了
而且作者好象很痛恨DEDE,循环检测并强行关闭,如果你是先开DEDE或者TRW再开UnebookEdit,他就两次调用ExitWindowsEx强行退出系统,象冲击波病毒似的,而且只要开着winHex,软件就罢工,非常无理霸道,谁要是真花钱注册了肯定得气吐血。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
记得upfeed写过这个东东的分析过程
001搜索一下
2004-9-6 00:46
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
1、CREATEFILE检测TRW、SOFTICE、REGMON、FILEMON、WINHEX。
2、FINDWINDOW检测以上可以检测的
3、花指令
4、CRC校验
5、程序SIZE校验
6、KEYFILE保护
7、IN3反OLLY
8、程序陷阱,反单步调试

不知道还有哪些,UPFEED的文章我看了,好象只分析到怎样计算注册文件的文件名,不太详细
2004-9-6 10:58
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
太难破了,看了好半天也没有看明白.
2004-9-8 09:57
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
我把UPFEED的文章翻出来了,大家看看,我想UPFEED肯定是完全破解了,但他只讲到注册文件名的算法。

**********************************
首先根据前辈的经历,我们把相关的工具(OD、dede、ProcDump)伪装一下,其中我的OD标题以及ClassName变动了,ProcDump通过ini也改变了,dede就放到同学机器上使用,准备就绪后,开始pj。

  用变态OD载入,很容易来到OEP处,此时用变态ProcDump来Dump Full,另存一个unpacked作为参考。用UE打开unpacked和chinesegb2312.lng(这是程序的语言文件,它是整个pj过程的突破口),其中的:

Form3.u3BT1.Hint=马上校验注册信息
Form3.u3BT1.Caption=确定

  告诉我们注册窗口的确定按钮名称,根据它可以在unpacked中查找字符串u3BT1Click,也就是按钮的响应事件,也就找到了代码位置=004D6668。在OD中断这个位置,中断以后发现大量的花指令,这里就看基本功了:

004D668D  .  8B83 00030000 MOV EAX, DWORD PTR DS:[EBX+300]
004D6693  .  E8 0C2FF7FF  CALL unEbookE.004495A4
004D6698  .  837D FC 00    CMP DWORD PTR SS:[EBP-4], 0              ;获得用户名

004D66A7  .  8B83 04030000 MOV EAX, DWORD PTR DS:[EBX+304]
004D66AD  .  E8 F22EF7FF  CALL unEbookE.004495A4
004D66B2  .  837D F8 00    CMP DWORD PTR SS:[EBP-8], 0              ;获得注册码

004D66DE  .  8B45 F0      MOV EAX, DWORD PTR SS:[EBP-10]          ;用户名
004D66E1  .  5A            POP EDX                                  ;注册码
004D66E2  .  E8 B18B0000  CALL unEbookE.004DF298                  ;跟进去啊!

  进来了看:
004DF2D7  >  E8 6877FEFF  CALL unEbookE.004C6A44                  ;这里的两个函数会频繁一起出现
004DF2DC  .  E8 A381FEFF  CALL unEbookE.004C7484                  ;就是Anti-Debug的

004DF322  >  E8 B977FEFF  CALL unEbookE.004C6AE0
004DF327  .  E8 A0BAFFFF  CALL unEbookE.004DADCC

004DF334  >  E8 E386FEFF  CALL unEbookE.004C7A1C
004DF339  .  E8 4681FEFF  CALL unEbookE.004C7484

004DF386  >  E8 D978FEFF  CALL unEbookE.004C6C64
004DF38B  .  E8 F480FEFF  CALL unEbookE.004C7484                  ;一样讨厌的代码

  在此软件中经常出现上面的代码,习惯就好了,现在开始检查注册码了:
004DF3AE  >  8B45 F8      MOV EAX, DWORD PTR SS:[EBP-8]
004DF3B1  .  E8 BA54F2FF  CALL unEbookE.00404870                  ;注册码长度
004DF3B6  .  83F8 0F      CMP EAX, 0F
004DF3B9  .  0F8C 8D010000 JL unEbookE.004DF54C                    ;长度大于等于15
004DF3C2  .  8B45 FC      MOV EAX, DWORD PTR SS:[EBP-4]
004DF3C5  .  E8 FA54FEFF  CALL unEbookE.004C48C4                  ;用户名的ASCII拼接串
                                                                    ;例如upfeed -> 757066656564

004DF3E1  .  E8 FE5BFEFF  CALL unEbookE.004C4FE4                  ;这是个非常非常非常重要的函数,解密字符串的
                                                                    ;可惜算法极其简单

  接下来的是把注册信息写入unEbookEdit.ini文件保存,我的是这样的:
[EOptions]
appfontcolor=645321(软件的大小的上限)
EXEtype=757066656564(用户名)
EXEfmt=37352D656570373837383132333435(注册码)

  往下走,又是很多的Anti代码,直到:
004DF5F4  .  8B45 F8      MOV EAX, DWORD PTR SS:[EBP-8]
004DF5F7  .  E8 7452F2FF  CALL unEbookE.00404870                  ;注册码长度要大于14
004DF5FC  .  83F8 0E      CMP EAX, 0E

004DF610  .  66:BA 0500    MOV DX, 5
004DF614  .  8B45 FC      MOV EAX, DWORD PTR SS:[EBP-4]            ;用户名
004DF617  .  E8 6854FEFF  CALL unEbookE.004C4A84                  ;用户名各位ASCII值 xor 5连接成字符串
                                                                    ;例如upfeed -> 707563606061

  接下来的是把注册信息写入win.ini文件保存,我的是这样的:
[EOptions]
sysinfo=707563606061(用户名 xor 5)
infosys=3E3C246C6C793E313E31383B3A3D3C(注册码 xor 9)
appfontcolor=645321(软件的大小的上限)

  然后如何提示没有就退出来了,不由得发呆一会,应该何去何从呢?还是看help把。原来未注册的版本在处理的时候会有小动作,好吧去下一本Ebook来看,于是好不容易找到了(http://home.eshunet.com/a/a2300/2276.htm)莫泊桑的大作,处理完毕发现果然很多页面是空白的,现在就来到“开始”按钮处理的地方看,怎么到这里完全参考前面的方法:004D9B80就是的。

  在这里中断后,我们不得不读很多无关代码,比如检查Ebook的有效性等等,耐心的读过去,一直到:

004E272B  .  8B45 FC      MOV EAX, DWORD PTR SS:[EBP-4]            ;就是Ebook的名字
004E272E  .  E8 9D6DF2FF  CALL unEbookE.004094D0                  ;可以敏感的觉察到这个就是FileExists函数

  在004094D0处断,那么检查keyfile的时候肯定会经过这里,果然就是,需要一个名为“eep27953735.dat”的文件,我们看看怎么得到的这个文件名:

004E135D  .  8B45 E8      MOV EAX, DWORD PTR SS:[EBP-18]
004E1360  .  8D4D F8      LEA ECX, DWORD PTR SS:[EBP-8]
004E1363  .  66:BA 0500    MOV DX, 5
004E1367  .  E8 1838FEFF  CALL unEbookE.004C4B84                  ;读出ini解密得到用户名

004E13D4  .  8B45 CC      MOV EAX, DWORD PTR SS:[EBP-34]
004E13D7  .  8D4D F4      LEA ECX, DWORD PTR SS:[EBP-C]
004E13DA  .  66:BA 0900    MOV DX, 9
004E13DE  .  E8 A137FEFF  CALL unEbookE.004C4B84                  ;读出ini解密得到注册码

004E13E9  >  8B45 F4      MOV EAX, DWORD PTR SS:[EBP-C]
004E13EC  .  E8 7F34F2FF  CALL unEbookE.00404870                  ;看看处理第几页,是否需要判断注册成功否
004E13F1  .  83F8 0D      CMP EAX, 0D
004E13F4  .  7C 34        JL SHORT unEbookE.004E142A

004E140E  .  8B45 B0      MOV EAX, DWORD PTR SS:[EBP-50]          ;‘-eep’
004E1411  .  8B55 F4      MOV EDX, DWORD PTR SS:[EBP-C]            ;注册码
004E1414  .  E8 9337F2FF  CALL unEbookE.00404BAC                  ;是否包含子串

004E1473  .  B9 02000000  MOV ECX, 2
004E1478  .  BA 01000000  MOV EDX, 1
004E147D  .  8B45 F4      MOV EAX, DWORD PTR SS:[EBP-C]
004E1480  .  E8 9B17FBFF  CALL unEbookE.00492C20                  ;Copy(Code, 1, 2)注册码前2位

004E14B5  .  83EA 03      SUB EDX, 3
004E14B8  .  B9 04000000  MOV ECX, 4
004E14BD  .  8B45 F4      MOV EAX, DWORD PTR SS:[EBP-C]
004E14C0  .  E8 0336F2FF  CALL unEbookE.00404AC8                  ;Copy(Code, Length-3, 4)注册码后4位

  下面变幻用户名的时候,作者可能出现了BUG,把Delphi中的字符串从0开始计算,导致一些隐患:

004E14E3  >  8B4D F8      MOV ECX, DWORD PTR SS:[EBP-8]
004E14E6  .  8A4C11 FF    MOV CL, BYTE PTR DS:[ECX+EDX-1]
004E14EA  .  80F1 52      XOR CL, 52
004E14ED  .  81E1 FF000000 AND ECX, 0FF
004E14F3  .  03D9          ADD EBX, ECX
004E14F5  .  42            INC EDX
004E14F6  .  48            DEC EAX
004E14F7  .^ 75 E4        JNZ SHORT unEbookE.004E14DD

  上面的算法描速如下:

for i:=0 to Length(Name)-1 do
begin
  sum := sum + Ord(Name[i]) xor $52;//Name[0]=0
end//结果存放在EBX中

004E1511  >  8B45 F4      MOV EAX, DWORD PTR SS:[EBP-C]
004E1514  .  E8 737DF2FF  CALL unEbookE.0040928C                  ;注册码后四位变成数值

004E1519  .  81F3 FF000000 XOR EBX, 0FF
004E151F  .  03C3          ADD EAX, EBX
004E1521  .  8D55 A0      LEA EDX, DWORD PTR SS:[EBP-60]
004E1524  .  E8 837CF2FF  CALL unEbookE.004091AC                  ;形成了文件名的一部分

  原来文件名是由 'eep' + 用户名变幻的结果 + 注册码前两位的ACSII值 + '.dat'而成。
2004-9-8 15:23
0
游客
登录 | 注册 方可回帖
返回
//