【文章标题】: 一个易语言程序的算法分析
【文章作者】: 河边渔者
【作者邮箱】: jwchlj.8256@163.com
【软件名称】: 微平精彩按钮设计2.0版
【软件大小】: 791k
【下载地址】: 网上有的是,包括已破解的
【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]
【保护方式】: 硬件代码、注册码
【编写语言】: 易语言
【使用工具】: OD、W32asm、计算器
【操作平台】: Windows XP
【软件介绍】: 利用它能设计出精美的图形按钮图片
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  再次声明:
  1. 该软件为免费注册,作者要求注册是为了调查了解软件使用情况,因此,嘿嘿……网上破解版有的是,不是我干的;
  2. 该软件在我机子上早就有,用来做些素材,刚开始拿它没法,后来学了些破解小技术就爆破了,总感觉找不出注册码来是一缺憾,于是有此一文;
  3. 没有搜索过论坛上是否有该软件的分析文章(起码我没看到),如有雷同,纯属巧合,不要说我那个啊!
  4. 有什么不当之处,还望各位看官一定批评指正,不胜感激!
  
  过程:
  1. 查壳:用Peid查为UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay],弱!人家说了是免费注册,可能不太重视保护,便宜咱一头疙瘩!
  2. 脱壳:用UPXShell完美脱干净后大约有1.01M,再Peid查为Microsoft Visual C++ 6.0 [Overlay],后来才知道上当了!伪装的!据说易语言的软件经常伪装成
  Visual C++,这一点也与易语言的特点和Peid的查壳方式有关,怪不得谁!
  
  3. OD载入,满是异常,要shift+f7/f8/f9才能通过,干脆到菜单->选项->调试设置->异常中,全勾上,没事了!程序停在00403831处。
  先搜索字符串,没找到可用信息,可明明随便输入时有出错提示,好办,第一:命令行输入bp MessageBoxExA下断;第二,OllyICE自带插件下断,两种都行。
  我用bp MessageBoxExA下断,f9运行输入注册名hebian,注册码2323,此时可看到硬件代码为2709578161,点“确定”,成功断在77D5057D处,是user32系统领空,
  看堆栈中已经有了出错提示,alt+f9,出现注册错误信息,点“确定”,到达1005a7d6处,再alt+f9共27次(挺熟的,为什么又是27次?)回到程序领空00445a83处,
  再搜索字符串,好啊,全出来了,找到这句“注册失败,请检查用户名与注册码是否正确。”双击到达00445a6f,冤枉,就在刚才的00445a83上面!
  往上翻翻,这一部分的开头是00445a50,可看不到它是从哪儿蹦来的,好办,祭出法宝W32asm立即就看到它是从0044571d处je来,看来OD和W32asm各有专长嘛,要让它们
  物尽其用,当然也许是我OD用的不熟。回到OD,找到这行,再往上翻,在004452e2处重新下断,删掉刚才的断点。重新开始,成功断在004452e2处。
  下面长篇大论开始喽!
  
  004452E2    55              PUSH EBP                        ;断点在这儿
  004452E3    8BEC            MOV EBP,ESP
  004452E5    81EC A0000000   SUB ESP,0A0
  004452EB    68 00000000     PUSH 0
  004452F0    BB 40060000     MOV EBX,640
  004452F5    E8 80940000     CALL 微平精彩.0044E77A
  004452FA    83C4 04         ADD ESP,4
  004452FD    6A FF           PUSH -1
  004452FF    6A 08           PUSH 8
  00445301    68 9B030116     PUSH 1601039B
  00445306    68 93030152     PUSH 52010393
  0044530B    E8 76940000     CALL 微平精彩.0044E786          ; 呼出假码
  00445310    83C4 10         ADD ESP,10                      ; 下面挺长一段是一些准备工作
  00445313    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
  00445316    68 04000080     PUSH 80000004
  0044531B    6A 00           PUSH 0
  0044531D    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
  00445320    85C0            TEST EAX,EAX
  00445322    75 05           JNZ SHORT 微平精彩.00445329
  00445324    B8 44924000     MOV EAX,微平精彩.00409244
  00445329    50              PUSH EAX
  0044532A    68 01000000     PUSH 1
  0044532F    BB 64010000     MOV EBX,164
  00445334    E8 41940000     CALL 微平精彩.0044E77A
  00445339    83C4 10         ADD ESP,10
  0044533C    8945 F4         MOV DWORD PTR SS:[EBP-C],EAX
  0044533F    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX
  00445342    8B5D FC         MOV EBX,DWORD PTR SS:[EBP-4]
  00445345    85DB            TEST EBX,EBX
  00445347    74 09           JE SHORT 微平精彩.00445352
  00445349    53              PUSH EBX
  0044534A    E8 31940000     CALL 微平精彩.0044E780
  0044534F    83C4 04         ADD ESP,4
  00445352    68 01030080     PUSH 80000301
  00445357    6A 00           PUSH 0
  00445359    68 06000000     PUSH 6
  0044535E    68 01000000     PUSH 1
  00445363    BB 20060000     MOV EBX,620
  00445368    E8 0D940000     CALL 微平精彩.0044E77A
  0044536D    83C4 10         ADD ESP,10
  00445370    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
  00445373    8955 EC         MOV DWORD PTR SS:[EBP-14],EDX
  00445376    894D F0         MOV DWORD PTR SS:[EBP-10],ECX
  00445379    68 01030080     PUSH 80000301
  0044537E    6A 00           PUSH 0
  00445380    68 0A000000     PUSH 0A
  00445385    8B4D F0         MOV ECX,DWORD PTR SS:[EBP-10]
  00445388    81F9 05000080   CMP ECX,80000005
  0044538E    74 0D           JE SHORT 微平精彩.0044539D
  00445390    68 05000000     PUSH 5
  00445395    E8 F2930000     CALL 微平精彩.0044E78C
  0044539A    83C4 04         ADD ESP,4
  0044539D    68 05000080     PUSH 80000005
  004453A2    6A 00           PUSH 0
  004453A4    8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]
  004453A7    85C0            TEST EAX,EAX
  004453A9    75 05           JNZ SHORT 微平精彩.004453B0
  004453AB    B8 85924000     MOV EAX,微平精彩.00409285
  004453B0    50              PUSH EAX
  004453B1    68 02000000     PUSH 2
  004453B6    BB 9C010000     MOV EBX,19C
  004453BB    E8 BA930000     CALL 微平精彩.0044E77A          ; 出现数值2709541563,不是硬件代码,但显然与硬件有关
  004453C0    83C4 1C         ADD ESP,1C                      ; 难道是它算出的机器码?下面它要参与运算
  004453C3    8945 DC         MOV DWORD PTR SS:[EBP-24],EAX   ; 下面又是一些简单设置,没意思
  004453C6    8955 E0         MOV DWORD PTR SS:[EBP-20],EDX
  004453C9    894D E4         MOV DWORD PTR SS:[EBP-1C],ECX
  004453CC    8B5D E8         MOV EBX,DWORD PTR SS:[EBP-18]
  004453CF    85DB            TEST EBX,EBX
  004453D1    74 09           JE SHORT 微平精彩.004453DC
  004453D3    53              PUSH EBX
  004453D4    E8 A7930000     CALL 微平精彩.0044E780
  004453D9    83C4 04         ADD ESP,4
  004453DC    8B4D E4         MOV ECX,DWORD PTR SS:[EBP-1C]
  004453DF    8B55 E0         MOV EDX,DWORD PTR SS:[EBP-20]
  004453E2    8B45 DC         MOV EAX,DWORD PTR SS:[EBP-24]
  004453E5    81F9 04000080   CMP ECX,80000004
  004453EB    75 0B           JNZ SHORT 微平精彩.004453F8
  004453ED    85C0            TEST EAX,EAX
  004453EF    75 18           JNZ SHORT 微平精彩.00445409
  004453F1    B8 44924000     MOV EAX,微平精彩.00409244
  004453F6    EB 11           JMP SHORT 微平精彩.00445409
  004453F8    81F9 05000080   CMP ECX,80000005
  004453FE    75 09           JNZ SHORT 微平精彩.00445409
  00445400    85C0            TEST EAX,EAX
  00445402    75 05           JNZ SHORT 微平精彩.00445409
  00445404    B8 85924000     MOV EAX,微平精彩.00409285
  00445409    51              PUSH ECX
  0044540A    52              PUSH EDX
  0044540B    50              PUSH EAX
  0044540C    68 01000000     PUSH 1
  00445411    BB 64010000     MOV EBX,164
  00445416    E8 5F930000     CALL 微平精彩.0044E77A
  0044541B    83C4 10         ADD ESP,10
  0044541E    8945 D4         MOV DWORD PTR SS:[EBP-2C],EAX
  00445421    8955 D8         MOV DWORD PTR SS:[EBP-28],EDX
  00445424    8B4D E4         MOV ECX,DWORD PTR SS:[EBP-1C]
  00445427    81F9 04000080   CMP ECX,80000004
  0044542D    74 0C           JE SHORT 微平精彩.0044543B
  0044542F    81F9 05000080   CMP ECX,80000005
  00445435    0F85 10000000   JNZ 微平精彩.0044544B
  0044543B    8B5D DC         MOV EBX,DWORD PTR SS:[EBP-24]
  0044543E    85DB            TEST EBX,EBX
  00445440    74 09           JE SHORT 微平精彩.0044544B
  00445442    53              PUSH EBX
  00445443    E8 38930000     CALL 微平精彩.0044E780          ; 下面开始一些数学运算,倒来倒去的
  00445448    83C4 04         ADD ESP,4
  0044544B    DD45 F4         FLD QWORD PTR SS:[EBP-C]        ; 把假码2323装入st0
  0044544E    DC45 D4         FADD QWORD PTR SS:[EBP-2C]      ; 2709541563+2323=2709543886
  00445451    DD5D CC         FSTP QWORD PTR SS:[EBP-34]      ; 2709543886送入st0
  00445454    6A FF           PUSH -1
  00445456    6A 08           PUSH 8
  00445458    68 9D030116     PUSH 1601039D
  0044545D    68 93030152     PUSH 52010393
  00445462    E8 1F930000     CALL 微平精彩.0044E786              ; 呼出注册名
  00445467    83C4 10         ADD ESP,10
  0044546A    8945 C8         MOV DWORD PTR SS:[EBP-38],EAX
  0044546D    6A 00           PUSH 0
  0044546F    6A 00           PUSH 0
  00445471    6A 00           PUSH 0
  00445473    68 04000080     PUSH 80000004
  00445478    6A 00           PUSH 0
  0044547A    8B45 C8         MOV EAX,DWORD PTR SS:[EBP-38]
  0044547D    85C0            TEST EAX,EAX
  0044547F    75 05           JNZ SHORT 微平精彩.00445486
  00445481    B8 44924000     MOV EAX,微平精彩.00409244
  00445486    50              PUSH EAX
  00445487    68 02000000     PUSH 2
  0044548C    BB 44010000     MOV EBX,144
  00445491    E8 E4920000     CALL 微平精彩.0044E77A              ; 取注册名的第一个字符h的16进制68
  00445496    83C4 1C         ADD ESP,1C
  00445499    8945 C4         MOV DWORD PTR SS:[EBP-3C],EAX
  0044549C    8B5D C8         MOV EBX,DWORD PTR SS:[EBP-38]
  0044549F    85DB            TEST EBX,EBX
  004454A1    74 09           JE SHORT 微平精彩.004454AC
  004454A3    53              PUSH EBX
  004454A4    E8 D7920000     CALL 微平精彩.0044E780
  004454A9    83C4 04         ADD ESP,4
  004454AC    DB45 C4         FILD DWORD PTR SS:[EBP-3C]      ; 68h的十进制数值104装入st0
  004454AF    DD5D BC         FSTP QWORD PTR SS:[EBP-44]      ; 存入st7备用
  004454B2    DD45 BC         FLD QWORD PTR SS:[EBP-44]
  004454B5    DC05 4E954000   FADD QWORD PTR DS:[40954E]      ; 104+固定数值852=956
  004454BB    DD5D BC         FSTP QWORD PTR SS:[EBP-44]      ; 956装入st0
  004454BE    DD45 BC         FLD QWORD PTR SS:[EBP-44]
  004454C1    DC0D 56954000   FMUL QWORD PTR DS:[409556]      ; 956*37=35372放入st0
  004454C7    DD5D B4         FSTP QWORD PTR SS:[EBP-4C]      ; 备用
  004454CA    6A FF           PUSH -1
  004454CC    6A 08           PUSH 8
  004454CE    68 9D030116     PUSH 1601039D
  004454D3    68 93030152     PUSH 52010393
  004454D8    E8 A9920000     CALL 微平精彩.0044E786
  004454DD    83C4 10         ADD ESP,10
  004454E0    8945 B0         MOV DWORD PTR SS:[EBP-50],EAX
  004454E3    68 04000080     PUSH 80000004
  004454E8    6A 00           PUSH 0
  004454EA    8B45 B0         MOV EAX,DWORD PTR SS:[EBP-50]
  004454ED    85C0            TEST EAX,EAX
  004454EF    75 05           JNZ SHORT 微平精彩.004454F6
  004454F1    B8 44924000     MOV EAX,微平精彩.00409244
  004454F6    50              PUSH EAX
  004454F7    68 01000000     PUSH 1
  004454FC    BB 30010000     MOV EBX,130
  00445501    E8 74920000     CALL 微平精彩.0044E77A              ; 取注册名位数6
  00445506    83C4 10         ADD ESP,10
  00445509    8945 AC         MOV DWORD PTR SS:[EBP-54],EAX
  0044550C    8B5D B0         MOV EBX,DWORD PTR SS:[EBP-50]
  0044550F    85DB            TEST EBX,EBX
  00445511    74 09           JE SHORT 微平精彩.0044551C
  00445513    53              PUSH EBX
  00445514    E8 67920000     CALL 微平精彩.0044E780
  00445519    83C4 04         ADD ESP,4
  0044551C    6A FF           PUSH -1
  0044551E    6A 08           PUSH 8
  00445520    68 9D030116     PUSH 1601039D
  00445525    68 93030152     PUSH 52010393
  0044552A    E8 57920000     CALL 微平精彩.0044E786
  0044552F    83C4 10         ADD ESP,10
  00445532    8945 A8         MOV DWORD PTR SS:[EBP-58],EAX
  00445535    68 01030080     PUSH 80000301
  0044553A    6A 00           PUSH 0
  0044553C    FF75 AC         PUSH DWORD PTR SS:[EBP-54]
  0044553F    68 04000080     PUSH 80000004
  00445544    6A 00           PUSH 0
  00445546    8B45 A8         MOV EAX,DWORD PTR SS:[EBP-58]
  00445549    85C0            TEST EAX,EAX
  0044554B    75 05           JNZ SHORT 微平精彩.00445552
  0044554D    B8 44924000     MOV EAX,微平精彩.00409244
  00445552    50              PUSH EAX
  00445553    68 02000000     PUSH 2
  00445558    BB 44010000     MOV EBX,144
  0044555D    E8 18920000     CALL 微平精彩.0044E77A              ; 取注册名最后一个字符n的16进制数值6e
  00445562    83C4 1C         ADD ESP,1C
  00445565    8945 A4         MOV DWORD PTR SS:[EBP-5C],EAX
  00445568    8B5D A8         MOV EBX,DWORD PTR SS:[EBP-58]
  0044556B    85DB            TEST EBX,EBX
  0044556D    74 09           JE SHORT 微平精彩.00445578
  0044556F    53              PUSH EBX
  00445570    E8 0B920000     CALL 微平精彩.0044E780
  00445575    83C4 04         ADD ESP,4
  00445578    DB45 A4         FILD DWORD PTR SS:[EBP-5C]      ; 6e的十进制数值110放入st0
  0044557B    DD5D 9C         FSTP QWORD PTR SS:[EBP-64]
  0044557E    DD45 9C         FLD QWORD PTR SS:[EBP-64]
  00445581    DC0D 5E954000   FMUL QWORD PTR DS:[40955E]      ; 110*51=5610
  00445587    DD5D 9C         FSTP QWORD PTR SS:[EBP-64]      ; 备用
  0044558A    68 01030080     PUSH 80000301
  0044558F    6A 00           PUSH 0
  00445591    68 0D000000     PUSH 0D
  00445596    68 01000000     PUSH 1
  0044559B    BB 20060000     MOV EBX,620
  004455A0    E8 D5910000     CALL 微平精彩.0044E77A              ; 取固定数值2680
  004455A5    83C4 10         ADD ESP,10
  004455A8    8945 90         MOV DWORD PTR SS:[EBP-70],EAX
  004455AB    8955 94         MOV DWORD PTR SS:[EBP-6C],EDX
  004455AE    894D 98         MOV DWORD PTR SS:[EBP-68],ECX
  004455B1    6A FF           PUSH -1
  004455B3    6A 08           PUSH 8
  004455B5    68 99030116     PUSH 16010399
  004455BA    68 93030152     PUSH 52010393
  004455BF    E8 C2910000     CALL 微平精彩.0044E786              ; 呼出硬件代码2709578161,注意,与上面那个不同
  004455C4    83C4 10         ADD ESP,10
  004455C7    8945 8C         MOV DWORD PTR SS:[EBP-74],EAX
  004455CA    68 04000080     PUSH 80000004
  004455CF    6A 00           PUSH 0
  004455D1    8B45 8C         MOV EAX,DWORD PTR SS:[EBP-74]
  004455D4    85C0            TEST EAX,EAX
  004455D6    75 05           JNZ SHORT 微平精彩.004455DD
  004455D8    B8 44924000     MOV EAX,微平精彩.00409244
  004455DD    50              PUSH EAX
  004455DE    68 01000000     PUSH 1
  004455E3    BB 64010000     MOV EBX,164
  004455E8    E8 8D910000     CALL 微平精彩.0044E77A
  004455ED    83C4 10         ADD ESP,10
  004455F0    8945 84         MOV DWORD PTR SS:[EBP-7C],EAX
  004455F3    8955 88         MOV DWORD PTR SS:[EBP-78],EDX
  004455F6    8B5D 8C         MOV EBX,DWORD PTR SS:[EBP-74]
  004455F9    85DB            TEST EBX,EBX
  004455FB    74 09           JE SHORT 微平精彩.00445606
  004455FD    53              PUSH EBX
  004455FE    E8 7D910000     CALL 微平精彩.0044E780
  00445603    83C4 04         ADD ESP,4
  00445606    DD45 84         FLD QWORD PTR SS:[EBP-7C]       ; 硬件代码作为实数装入st0
  00445609    DC0D 66954000   FMUL QWORD PTR DS:[409566]      ; 2709578161*31=83996922991
  0044560F    DD9D 7CFFFFFF   FSTP QWORD PTR SS:[EBP-84]
  00445615    DD45 B4         FLD QWORD PTR SS:[EBP-4C]
  00445618    DC45 9C         FADD QWORD PTR SS:[EBP-64]      ; 35372+5610=40982
  0044561B    8B4D 98         MOV ECX,DWORD PTR SS:[EBP-68]
  0044561E    8B55 94         MOV EDX,DWORD PTR SS:[EBP-6C]
  00445621    8B45 90         MOV EAX,DWORD PTR SS:[EBP-70]
  00445624    81F9 01010080   CMP ECX,80000101
  0044562A    75 07           JNZ SHORT 微平精彩.00445633
  0044562C    25 FF000000     AND EAX,0FF
  00445631    EB 2F           JMP SHORT 微平精彩.00445662
  00445633    81F9 01020080   CMP ECX,80000201
  00445639    75 03           JNZ SHORT 微平精彩.0044563E
  0044563B    98              CWDE
  0044563C    EB 24           JMP SHORT 微平精彩.00445662
  0044563E    8985 74FFFFFF   MOV DWORD PTR SS:[EBP-8C],EAX
  00445644    81F9 01030080   CMP ECX,80000301
  0044564A    74 1C           JE SHORT 微平精彩.00445668
  0044564C    81F9 01040080   CMP ECX,80000401
  00445652    75 1C           JNZ SHORT 微平精彩.00445670
  00445654    8995 78FFFFFF   MOV DWORD PTR SS:[EBP-88],EDX
  0044565A    DFAD 74FFFFFF   FILD QWORD PTR SS:[EBP-8C]
  00445660    EB 33           JMP SHORT 微平精彩.00445695
  00445662    8985 74FFFFFF   MOV DWORD PTR SS:[EBP-8C],EAX
  00445668    DB85 74FFFFFF   FILD DWORD PTR SS:[EBP-8C]      ; 2680h的十进制数值9856装入st0
  0044566E    EB 25           JMP SHORT 微平精彩.00445695
  00445670    81F9 01050080   CMP ECX,80000501
  00445676    75 08           JNZ SHORT 微平精彩.00445680
  00445678    D985 74FFFFFF   FLD DWORD PTR SS:[EBP-8C]
  0044567E    EB 15           JMP SHORT 微平精彩.00445695
  00445680    81F9 01060080   CMP ECX,80000601
  00445686    74 1F           JE SHORT 微平精彩.004456A7
  00445688    68 02000000     PUSH 2
  0044568D    E8 FA900000     CALL 微平精彩.0044E78C
  00445692    83C4 04         ADD ESP,4
  00445695    DD9D 74FFFFFF   FSTP QWORD PTR SS:[EBP-8C]
  0044569B    8B85 74FFFFFF   MOV EAX,DWORD PTR SS:[EBP-8C]
  004456A1    8B95 78FFFFFF   MOV EDX,DWORD PTR SS:[EBP-88]
  004456A7    8985 74FFFFFF   MOV DWORD PTR SS:[EBP-8C],EAX
  004456AD    8995 78FFFFFF   MOV DWORD PTR SS:[EBP-88],EDX
  004456B3    DC85 74FFFFFF   FADD QWORD PTR SS:[EBP-8C]      ; 40982+9856=50838
  004456B9    DC85 7CFFFFFF   FADD QWORD PTR SS:[EBP-84]      ; 50838+83996922991=83996973829
  004456BF    DD9D 6CFFFFFF   FSTP QWORD PTR SS:[EBP-94]      ; 备用
  004456C5    8B4D 98         MOV ECX,DWORD PTR SS:[EBP-68]
  004456C8    81F9 04000080   CMP ECX,80000004
  004456CE    74 0C           JE SHORT 微平精彩.004456DC
  004456D0    81F9 05000080   CMP ECX,80000005
  004456D6    0F85 10000000   JNZ 微平精彩.004456EC
  004456DC    8B5D 90         MOV EBX,DWORD PTR SS:[EBP-70]
  004456DF    85DB            TEST EBX,EBX
  004456E1    74 09           JE SHORT 微平精彩.004456EC
  004456E3    53              PUSH EBX
  004456E4    E8 97900000     CALL 微平精彩.0044E780
  004456E9    83C4 04         ADD ESP,4
  004456EC    DD85 6CFFFFFF   FLD QWORD PTR SS:[EBP-94]       ; 83996973829装入st0处
  004456F2    DC25 6E954000   FSUB QWORD PTR DS:[40956E]      ; 83996973829-6566985=83990406844
  004456F8    DD9D 64FFFFFF   FSTP QWORD PTR SS:[EBP-9C]
  004456FE    DD45 CC         FLD QWORD PTR SS:[EBP-34]
  00445701    DCA5 64FFFFFF   FSUB QWORD PTR SS:[EBP-9C]      ; 2709543886-83990406844=-81280862958
  00445707    D9E4            FTST
  00445709    DFE0            FSTSW AX                        ; 保存fst的值3900到AX
  0044570B    F6C4 01         TEST AH,1                       ; 测试ah=39与1是否相等
  0044570E    74 02           JE SHORT 微平精彩.00445712      ; 相等则跳,这儿应该跳,因此这儿也是一爆破点
  00445710    D9E0            FCHS                            ; 上面的负数变为正数
  00445712    DC1D 76954000   FCOMP QWORD PTR DS:[409576]     ; 比较81280862958与0,不等则fst赋0
  00445718    DFE0            FSTSW AX                        ; 0保存到eax
  0044571A    F6C4 41         TEST AH,41                      ; 比较ah与41是否相等,影响标志位
  0044571D    0F84 2D030000   JE 微平精彩.00445A50            ; 跳向失败,爆破点之一
  
  …………省略若干行,估计是与功能有关,没有追
  
  0044593D    6A 00           PUSH 0
  0044593F    68 7E954000     PUSH 微平精彩.0040957E              ; 微平精彩按钮设计 v2.0版 (注册版)
  00445944    6A FF           PUSH -1
  00445946    6A 08           PUSH 8
  00445948    68 00000106     PUSH 6010000
  0044594D    68 01000152     PUSH 52010001
  00445952    E8 3B8E0000     CALL 微平精彩.0044E792
  00445957    83C4 18         ADD ESP,18
  0044595A    68 01030080     PUSH 80000301
  0044595F    6A 00           PUSH 0
  00445961    68 03000000     PUSH 3
  00445966    68 01000000     PUSH 1
  0044596B    BB 20060000     MOV EBX,620
  00445970    E8 058E0000     CALL 微平精彩.0044E77A
  00445975    83C4 10         ADD ESP,10
  00445978    8945 F4         MOV DWORD PTR SS:[EBP-C],EAX
  0044597B    8955 F8         MOV DWORD PTR SS:[EBP-8],EDX
  0044597E    894D FC         MOV DWORD PTR SS:[EBP-4],ECX
  00445981    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
  00445984    81F9 04000080   CMP ECX,80000004
  0044598A    74 0D           JE SHORT 微平精彩.00445999
  0044598C    68 05000000     PUSH 5
  00445991    E8 F68D0000     CALL 微平精彩.0044E78C
  00445996    83C4 04         ADD ESP,4
  00445999    6A 00           PUSH 0
  0044599B    FF75 F4         PUSH DWORD PTR SS:[EBP-C]
  0044599E    6A FF           PUSH -1
  004459A0    6A 08           PUSH 8
  004459A2    68 A0030116     PUSH 160103A0
  004459A7    68 93030152     PUSH 52010393
  004459AC    E8 E18D0000     CALL 微平精彩.0044E792
  004459B1    83C4 18         ADD ESP,18
  004459B4    8B5D F4         MOV EBX,DWORD PTR SS:[EBP-C]
  004459B7    85DB            TEST EBX,EBX
  004459B9    74 09           JE SHORT 微平精彩.004459C4
  004459BB    53              PUSH EBX
  004459BC    E8 BF8D0000     CALL 微平精彩.0044E780
  004459C1    83C4 04         ADD ESP,4
  004459C4    6A 00           PUSH 0
  004459C6    68 00000000     PUSH 0
  004459CB    6A FF           PUSH -1
  004459CD    6A 05           PUSH 5
  004459CF    68 97030116     PUSH 16010397
  004459D4    68 93030152     PUSH 52010393
  004459D9    E8 B48D0000     CALL 微平精彩.0044E792
  004459DE    83C4 18         ADD ESP,18
  004459E1    6A 00           PUSH 0
  004459E3    6A 00           PUSH 0
  004459E5    6A 00           PUSH 0
  004459E7    68 01030080     PUSH 80000301
  004459EC    6A 00           PUSH 0
  004459EE    68 00000000     PUSH 0
  004459F3    68 04000080     PUSH 80000004
  004459F8    6A 00           PUSH 0
  004459FA    68 4B964000     PUSH 微平精彩.0040964B              ; 你已成功注册了该软件,非常感谢您的注册!
  004459FF    68 03000000     PUSH 3
  00445A04    BB 00030000     MOV EBX,300
  00445A09    E8 6C8D0000     CALL 微平精彩.0044E77A
  00445A0E    83C4 28         ADD ESP,28
  00445A11    6A 00           PUSH 0
  00445A13    68 46964000     PUSH 微平精彩.00409646              ; 确定
  00445A18    6A FF           PUSH -1
  00445A1A    6A 0A           PUSH 0A
  00445A1C    68 96030116     PUSH 16010396
  00445A21    68 93030152     PUSH 52010393
  00445A26    E8 678D0000     CALL 微平精彩.0044E792
  00445A2B    83C4 18         ADD ESP,18
  00445A2E    6A 00           PUSH 0
  00445A30    68 01000000     PUSH 1
  00445A35    6A FF           PUSH -1
  00445A37    6A 05           PUSH 5
  00445A39    68 A4030116     PUSH 160103A4
  00445A3E    68 93030152     PUSH 52010393
  00445A43    E8 4A8D0000     CALL 微平精彩.0044E792
  00445A48    83C4 18         ADD ESP,18
  00445A4B    E9 36000000     JMP 微平精彩.00445A86
  00445A50    68 04000080     PUSH 80000004
  00445A55    6A 00           PUSH 0
  00445A57    68 75964000     PUSH 微平精彩.00409675              ; 注册失败
  00445A5C    68 01030080     PUSH 80000301
  00445A61    6A 00           PUSH 0
  00445A63    68 10000000     PUSH 10
  00445A68    68 04000080     PUSH 80000004
  00445A6D    6A 00           PUSH 0
  00445A6F    68 7E964000     PUSH 微平精彩.0040967E              ; 注册失败,请检查用户名与注册码是否正确。
  00445A74    68 03000000     PUSH 3
  00445A79    BB 00030000     MOV EBX,300
  00445A7E    E8 F78C0000     CALL 微平精彩.0044E77A
  00445A83    83C4 28         ADD ESP,28                      ; (初始 cpu 选择)
  00445A86    8BE5            MOV ESP,EBP
  00445A88    5D              POP EBP
  00445A89    C3              RETN
  
  注册码计算方法:
  
  1. 取第一次得到的像是硬件代码的2709541563与假码2323相加得到2709543886;
  2. 取注册名hebian的第一位字符h的16进制数值68转成十进制104与固定数852相加得到956,再用956乘37得到35372,即(104+852)*37=35372;
  3. 取注册名hebian的最后一位字符n的16进制数值6e转成十进制110与51相乘得到5610,即110*51=5610;
  4. 把35372与5610相加得到40982,取固定数2680h的十进制数值9856与40982相加得到50838,即9856+(35372+5610)=50838;
  5. 取硬件代码2709578161与31相乘得到83996922991,即2709578161*31=83996922991,把上面得到的50838与83996922991相加得到83996973829,
     再用83996973829减去固定数6566985得到83990406844,即83996973829-6566985=83990406844;
  6. 用第一步得到的2709543886减去83990406844,若结果为0则注册成功!
  
  7. 了解了程序是如何处理我们输入的数据的,真码的计算也就简单了!
     不妨设真码为X,则可得方程为
     2709541563+X-83990406844=0
     解得X=83990406844-2709541563=81280865281
  那位看官说了,这么简单怎么还方程方程的?不瞒您说,最后算真码时,一不小心算错了两次。你说什么?让我到小学再深造深造,不要啊……我跑!
  
  重新来一遍,输入注册名hebian,输入注册码81280865281,弹出倍亲切的成功窗口“你已成功注册了该软件,非常感谢您的注册!”耶……爽吧!
  
  下面再说一说爆破的方法,有人说了,你都找到注册码了还弄什么爆破干嘛?我第一次破这个程序是用的爆破方法,因此念念不忘,同时写出来也为共享。
  从上面的分析过程可以知道,关键点在0044571D   /0F84 2D030000   JE 微平精彩.00445A50                ; 跳向失败,爆破点之一
  把这儿改成JNE,就会弹出正确注册的窗口,但标题栏仍然显示为“未注册”,同时功能仍然受制,应该同时再改两个地方
  爆破点2  00443C9D   /0F85 35000000   JNE 微平精彩.00443CD8
       改为00443C9D   /0F84 35000000   JE 微平精彩.00443CD8 使保存新按钮能用,功能限制取消
  爆破点3  00442BD3   /0F84 22000000   JZ 微平精彩.00442BFB
       改为00442BD3   /0F85 22000000   JNZ 微平精彩.00442BFB  使标题栏显示为“注册版”
  
  谢谢您能看完,再次向各位师哥、师姐、师弟、师妹、大侠、大牛致以崇高的革命的敬礼!祝你们吃嘛嘛香,破嘛嘛破!
  
--------------------------------------------------------------------------------
【经验总结】
  也没啥可总结的,现在回头看看,感觉挺简单的,刚接触破解,要学习的东西太多了!一定要有耐心、毅力,不能轻言放弃
  !支持我的动力一是兴趣,二是我相信“只要程序能从本地计算机中完整地运行一遍所有功能,就能够被破解”这一理论,
  这是信心所在啊。
  说实话,到了看雪论坛有种回到家的感觉,论坛的氛围真好!后悔没早点到这儿来,前几年算白活了!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年05月31日 0:41:55