pj2020 发表于 2017-4-8 22:06

某定时软件的简单算法分析[新手思路]

本帖最后由 pj2020 于 2017-4-8 23:45 编辑

【文章标题】:某定时软件的简单算法分析[
【文章作者】:pj2020
【软件名称】:某定时软件
【软件大小】:1.12MB
【保护方式】:注册码
【下载地址】:不提供
【加壳方式】:无壳
【编写工具】:Borland Delphi 6.0 -7.0
【逆向工具】:PEID、OD
【操作平台】:盗版XP3
【作者声明】:只是感兴趣,没有其他目的
【软件简介】根据<关机时间>自动关闭计算机,可设定无限个任务,空闲关机,指定关机,每次均可关机。任务类型:提醒,打开文件(可以打开mp3文件,程序,网址等),关闭程序,断开拨号,拨号连接,注销计算机,待机计算机,休眠计算机,重启计算机,关闭计算机,快速重启,快速关机。超过设定秒数不关闭关机提示框,则自动关闭计算机,如选择取消关机,本程序则会不关机,不妨碍正在进行的工作,上班族的好选择。适用:服务器、上班族、公共计算机、家庭用户。
【思路方法】前面的步骤比较简单,在此不再啰嗦,直接进入算法分部:(以本机的机器码“081308”为例)
00486810/.55            push ebp                           ;//断在这里,F8跟踪
00486811|.8BEC          mov ebp,esp
00486813|.B9 06000000   mov ecx,0x6
00486818|>6A 00         /push 0x0
0048681A|.6A 00         |push 0x0
0048681C|.49            |dec ecx
0048681D|.^ 75 F9         \jnz short 定时任务.00486818
0048681F|.53            push ebx                           ;
00486820|.56            push esi
00486821|.8BF0          mov esi,eax
00486823|.33C0          xor eax,eax
00486825|.55            push ebp
00486826|.68 546A4800   push 定时任务.00486A54
0048682B|.64:FF30       push dword ptr fs:            ;
0048682E|.64:8920       mov dword ptr fs:,esp
00486831|.BB 01000000   mov ebx,0x1                        ;ebx=0x1
00486836|>8D55 EC       /lea edx,
00486839|.8B86 18030000 |mov eax,dword ptr ds:
0048683F|.E8 84ADFCFF   |call 定时任务.004515C8
00486844|.8B45 EC       |mov eax,                   ;机器码, (ASCII "081308")
00486847|.8A5418 FF   |mov dl,byte ptr ds:    ;取机器码第1位ASC码:30 ('0')/取机器码第2位ASC码:38
0048684B|.8D45 F0       |lea eax,
0048684E|.E8 C5D9F7FF   |call 定时任务.00404218
00486853|.8B55 F0       |mov edx,
00486856|.8D45 FC       |lea eax,
00486859|.E8 9ADAF7FF   |call 定时任务.004042F8
0048685E|.8D55 E4       |lea edx,
00486861|.8B86 18030000 |mov eax,dword ptr ds:
00486867|.E8 5CADFCFF   |call 定时任务.004515C8
0048686C|.8B45 E4       |mov eax,                   ;机器码, (ASCII "081308")
0048686F|.8A5418 01   |mov dl,byte ptr ds:    ;取机器码第3位ASC码:31 ('1')/取机器码第4位ASC码:33
00486873|.8D45 E8       |lea eax,
00486876|.E8 9DD9F7FF   |call 定时任务.00404218
0048687B|.8B55 E8       |mov edx,
0048687E|.8D45 F8       |lea eax,
00486881|.E8 72DAF7FF   |call 定时任务.004042F8
00486886|.8D55 DC       |lea edx,
00486889|.8B86 18030000 |mov eax,dword ptr ds:
0048688F|.E8 34ADFCFF   |call 定时任务.004515C8
00486894|.8B45 DC       |mov eax,                   ;机器码, (ASCII "081308")
00486897|.8A5418 03   |mov dl,byte ptr ds:    ;取机器码第5位ASC码:30 ('0')/取机器码第6位ASC码:38
0048689B|.8D45 E0       |lea eax,
0048689E|.E8 75D9F7FF   |call 定时任务.00404218
004868A3|.8B55 E0       |mov edx,
004868A6|.8D45 F4       |lea eax,
004868A9|.E8 4ADAF7FF   |call 定时任务.004042F8
004868AE|.43            |inc ebx                           ;ebx加1作为计数器
004868AF|.83FB 03       |cmp ebx,0x3                         ;ebx是否等于3,不等于继续
004868B2|.^ 75 82         \jnz short 定时任务.00486836         ;上面取机器码ASC码是按先取奇数位、再取偶数位顺序来取
004868B4|.8B45 F4       mov eax,                  ;
004868B7|.E8 901AF8FF   call 定时任务.0040834C
004868BC|.8B45 FC       mov eax,                  ;取机器码第1-2位:(ASCII "08")
004868BF|.E8 881AF8FF   call 定时任务.0040834C
004868C4|.8B45 F8       mov eax,                  ;取机器码第3-4位: (ASCII "13")
004868C7|.E8 801AF8FF   call 定时任务.0040834C
004868CC|.8B45 F4       mov eax,                  ;取机器码第5-6位: (ASCII "08")
004868CF|.E8 1CDAF7FF   call 定时任务.004042F0
004868D4|.83F8 03       cmp eax,0x3                        ;eax=00000002
004868D7|.7D 12         jge short 定时任务.004868EB          ;跳转未实现
004868D9|.8D55 F4       lea edx,
004868DC|.B9 01000000   mov ecx,0x1                        ;ecx=0x1
004868E1|.B8 6C6A4800   mov eax,定时任务.00486A6C            ;eax=固定字串20
004868E6|.E8 EDDCF7FF   call 定时任务.004045D8               ;
004868EB|>8B45 F4       mov eax,                  ;eax=固定字串20与机器码最后两位相连, (ASCII "2008")
004868EE|.E8 591AF8FF   call 定时任务.0040834C
004868F3|.69D8 69010000 imul ebx,eax,0x169                   ;ebx=eax X 0x169=0x7D8(十进制为2008) X 0x169=000B0F98
004868F9|.8B45 FC       mov eax,                  ;取机器码第1-2位:(ASCII "08")
004868FC|.E8 4B1AF8FF   call 定时任务.0040834C
00486901|.8BD0          mov edx,eax                        ;eax=00000008
00486903|.C1E0 05       shl eax,0x5                        ;机器码前二位左移5位,结果=0x100
00486906|.2BC2          sub eax,edx                        ;机器码前二位左移5位eax=00000100后-机器码前二位edx=00000008==0xF8
00486908|.03D8          add ebx,eax                        ; 上面相乘结果+相减结果 ebx=ebx+eax=B0F98+F8=000B1090
0048690A|.8B45 F8       mov eax,                  ;取机器码第3-4位: (ASCII "13")
0048690D|.E8 3A1AF8FF   call 定时任务.0040834C
00486912|.03D8          add ebx,eax                        ;ebx=ebx+eax=000B1090+0000000D(机器码第3-4位的16进制)=000B109D
00486914|.8D55 D8       lea edx,
00486917|.8B86 1C030000 mov eax,dword ptr ds:
0048691D|.E8 A6ACFCFF   call 定时任务.004515C8
00486922|.837D D8 00    cmp ,0x0                   ;假码: (ASCII "123456")
00486926|.75 18         jnz short 定时任务.00486940            ;注册码不能为空
00486928|.6A 00         push 0x0                           ; /Style = MB_OK|MB_APPLMODAL
0048692A|.68 706A4800   push 定时任务.00486A70                   ; |失败
0048692F|.68 786A4800   push 定时任务.00486A78                   ; |注册失败,请与销售方联系
00486934|.6A 00         push 0x0                           ; |hOwner = NULL
00486936|.E8 3101F8FF   call <jmp.&user32.MessageBoxA>       ; \MessageBoxA
0048693B|.E9 CC000000   jmp 定时任务.00486A0C
00486940|>8D55 D4       lea edx,
00486943|.8B86 1C030000 mov eax,dword ptr ds:
00486949|.E8 7AACFCFF   call 定时任务.004515C8
0048694E|.8B45 D4       mov eax,                   ;假码
00486951|.E8 F619F8FF   call 定时任务.0040834C
00486956|.3BD8          cmp ebx,eax                        ;真假比较,ebx=000B109D(真码16进制),eax=0001E240(假码16进制)
00486958|.0F85 9B000000 jnz 定时任务.004869F9                  ;跳向失败


算法总结:(以本机的机器码“081308”为例)**** Hidden Message *****

本机注册码:机器码:081308       注册码:725149
注册码以16进制形式保存在:HKEY_LOCAL_MACHINE\SOFTWARE\WRHsoft\


算法注册机:因是国人自己写的软件,不提供注册机!

Shark恒 发表于 2017-4-8 22:13

最后怎么没总结一下,例如算法公式

pj2020 发表于 2017-4-8 22:29

Shark恒 发表于 2017-4-8 22:13
最后怎么没总结一下,例如算法公式

刚刚边写边保存,还没有完工哈。
现在全部完工,谢谢老大关心哈!{:5_116:}

Shark恒 发表于 2017-4-8 22:32

pj2020 发表于 2017-4-8 22:29
刚刚边写边保存,还没有完工哈。
现在全部完工,谢谢老大关心哈!

原来如此{:6_208:}

疯子888 发表于 2017-4-8 23:23

吆西,为啥不提供下载

chenjinghappy 发表于 2017-4-9 02:01

谢谢楼主分享

ffg998 发表于 2017-4-9 08:20

看不懂,要努力学习

adime 发表于 2017-4-9 09:29

谢谢楼主分享,但为啥不提供软件下载呢,让别人照着这个练习一下

763742228 发表于 2017-4-9 10:24

过来看看…………

小Cold 发表于 2017-4-9 10:53

{:5_116:}{:5_116:}
页: [1] 2 3 4 5 6 7
查看完整版本: 某定时软件的简单算法分析[新手思路]