• 标 题:Take-1 version 2.2 (6千字)
  • 作 者:Freeplayer
  • 时 间:2001-11-27 11:13:46
  • 链 接:http://bbs.pediy.com

目标: Take-1 version 2.2
地址: http://www.filestream.com/take-1
保护: 没有注册码输入地方 , 30 天试用期 , 期满後有 nag告知试用期已满 , 联络作者购买完全版 , 按确定後软件退出 , 不能运行
工具: Softice4.05 ,W32dasm , Hiew 6.75

前言: 破这软件前 , 曾尝试找出它是否 key file 保护 , 不得要领 , (Filemon , Regmon , OllyDBg全都用了, 可能水平关系 ,没有本事看出来 :-P ) 後将时间往後一个月 , 见到就算过期也没有输入 sn 的地方 , 拨回原来时间 , 软件又可以用了 , 心想 , 惟有暴破了 , 但问题是 , 从哪入手呢 ?
.
从 Nag screen (messagebox) 入手吧 !
.
开始: 软件是 Ms Visual C++ 6.0 , 没加壳 , 用 W32dasm 反汇编後 , 找不到错误讯息字串 ....(This trial version of Take-1 has expired....)
倒 !! 很多教材都是找到字串 , 双击字串 , 往上找跳转 , 改跳转就破解成功了 , 现在找不到字串 , 怎麽办啊 !!  :(
好 , 用 Softice 拦下它调用的函数吧 , 用那个好呢 ? 试了几次 ,
.
.
1)最後成功用 bpx createwindowex 拦下. (Ctrl+D 设断点)
bc *        ;清除断点
F12  七次後  显示讨厌的期满窗口
按 "确定" , Sice 再出现 , 看一看 ,
:004F774E E83B130500              call 00548A8E
.
成 , 有头绪了 :-)
.
2)打开 W32Dasm , 载入 take1.exe , 点 "Goto" >"Goto Code Location"
输入 004F774E , 按 OK
.
.
:004F770A 50                      push eax

* Reference To: USER32.wsprintfA, Ord:02ACh
                                  |
:004F770B FF1580C85900            Call dword ptr [0059C880]
:004F7711 83C410                  add esp, 00000010
:004F7714 8D4DEC                  lea ecx, dword ptr [ebp-14]
:004F7717 E87E570500              call 0054CE9A
:004F771C 8D8514FCFFFF            lea eax, dword ptr [ebp+FFFFFC14]
:004F7722 50                      push eax
:004F7723 E8BF410300              call 0052B8E7
:004F7728 59                      pop ecx
:004F7729 898690000000            mov dword ptr [esi+00000090], eax
:004F772F E8EFCAFFFF              call 004F4223                      ;典型的 Call->test->jump
:004F7734 85C0                    test eax, eax
:004F7736 7563                    jne 004F779B                        ;这里可以跳过"过期"的Call
:004F7738 53                      push ebx
:004F7739 8D8D1CFEFFFF            lea ecx, dword ptr [ebp+FFFFFE1C]
:004F773F E897BBF5FF              call 004532DB
:004F7744 8D8D1CFEFFFF            lea ecx, dword ptr [ebp+FFFFFE1C]
:004F774A C645FC01                mov [ebp-04], 01
:004F774E E83B130500              call 00548A8E                      ;关键 Call , 往上找
:004F7753 51                      push ecx
:004F7754 8BCC                    mov ecx, esp
:004F7756 8965EC                  mov dword ptr [ebp-14], esp

* Possible StringData Ref from Data Obj ->"Take-1"
                                  |
:004F7759 68FC336100              push 006133FC
:004F775E E8A5570500              call 0054CF08
:004F7763 51                      push ecx
:004F7764 C645FC02                mov [ebp-04], 02
:004F7768 8BCC                    mov ecx, esp
:004F776A 8965E8                  mov dword ptr [ebp-18], esp

* Possible StringData Ref from Data Obj ->"Software\Microsoft\Windows\CurrentVersion\Run"
                                  |
:004F776D 68004F6000              push 00604F00
.
.
为了证实一下这个跳转 ,将光条停在:004F7736 7563                    jne 004F779B
按右箭咀(Execute Jump 的快捷键) 执行这个 jump , 上下看一下 , 似乎没有问题 , OK
在底部 Code Data @004F7736 @Offset 000F7736h in File:take1.exe ,记下 offset address
.
.
3)打开 Hiew , 载入 take1.exe , 按 F4 , 选 Decode , 之後按 F5 (goto),输入 000F7736 (h是16进制的意思,不用输入) , F3(edit) , F2(Asm) ,
你会见到 jne        0000F779B伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪?
改前面的 Opcodes 为 jmp , 按回车 ,紧随会出现下一条指令 , 因不用修改 , 故按 Esc 键,
你会见到已变成 000F7736: E960000000                  jmp        0000F779B
最後按 F9 (Update) , F10 关闭
.
.
运行 cracked 後的 take1.exe , 呵呵 , 搞定 , 好开心呀 !!
.
.
因这个是 Trial Version 版 , 虽然被破了 , 仍有 "Trial Version" 的显示
曾用 eXeScope 和 UltraEdit 都找不到 , 还请前辈指教如何去除 , 谢谢
.
.
後话: 写这个教程时间远比破解为短 , 功力还不够 , 想破脑袋 , 失败好多次才有以上的结果,
写这个的目的 , 在於一个初学者的角度 , 去思考非常规的破解 , 应怎样呢 ? (因为我也是初学者)
所以尽量写得详细点 , 与及为什麽要那样做 , 高手就不用看了 (显然你也在看 :-D )
.
.
到此为止 , 再见  :)
.
.
後记: 文章贴出後 , 幸得 Fpc 提点查找字串的方法 , 立即开工 :
.
4)打开 Hiew , 载入 take1.exe , 按 F4 , 选 Hex ,
然後 F7(Search) , 游标往 ASCII 处键入 ( <--开括号
游标往 Hex 处键入 00 <--数字 , 重覆步骤如下 :
.
.
  [Forward /Full  ]                                                   
?ASCII: ( t r i a伪伪伪伪伪?                                        ?
?                                                                    ?
?  Hex: 28 00 74 00 72 00 69 00 61 伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪伪??
                                                                      ?
.
.
按回车键 , 你会见到 :
006CA7D0:  00 00 00 00-00 00 00 00-00 00 16 00-54 00 61 00             T a
006CA7E0:  6B 00 65 00-2D 00 31 00-20 00 28 00-54 00 72 00  k e - 1  ( T r
006CA7F0:  69 00 61 00-6C 00 20 00-56 00 65 00-72 00 73 00  i a l  V e r s
006CA800:  69 00 6F 00-6E 00 29 00-3C 00 54 00-6F 00 67 00  i o n ) < T o g
006CA810:  67 00 6C 00-65 00 73 00-20 00 74 00-6F 00 20 00  g l e s  t o
006CA820:  63 00 72 00-65 00 61 00-74 00 65 00-20 00 6F 00  c r e a t e  o
006CA830:  72 00 20 00-64 00 65 00-73 00 74 00-72 00 6F 00  r  d e s t r o
006CA840:  79 00 20 00-74 00 68 00-65 00 20 00-54 00 72 00  y  t h e  T r
006CA850:  61 00 79 00-20 00 49 00-63 00 6F 00-6E 00 2E 00  a y  I c o n .
006CA860:  0A 00 54 00-6F 00 67 00-67 00 6C 00-65 00 20 00 
T o g g l e
006CA870:  54 00 72 00-61 00 79 00-20 00 49 00-63 00 6F 00  T r a y  I c o
006CA880:  6E 00 09 00-46 00 69 00-6E 00 64 00-20 00 54 00  n      F i n d  T
.
.
游标停在 006CA7E0: 28 的 Hex 数值上:
006CA7E0:  6B 00 65 00-2D 00 31 00-20 00 28 00-54 00 72 00  k e - 1  ( T r
.
F3 修改为 00 , 一边修改 , 右边的 ASCII 字串会相应改变 , 在这情况是改为 00 ,
字符就会消失 , 直至你见 (Trail Version) 都改掉了 , 手术完成 !
.
.
F9 update , F10 离开
.
重新运得 take1.exe , 再没有过期提示 , 也没有 (Trial Version) 字串
感觉就如注册版一样 , 好爽 !  :-)
.
.
转贴请不要修改内容 , 保持完整性 , 谢谢 !!

作者: Freeplayer
写於: 2001年11月27日 10:35 AM