fonge 发表于 2007-3-7 17:01:02

原帖由 海风月影 于 2007-3-7 16:26 发表


这个crackme比较搞笑

00453CA5   .8B45 EC       mov   eax, dword ptr ss:                      ;注册码
00453CA8   .E8 07FDFFFF   call    CrackMe0.004539B4                               ;写内存,修改下面5个字节
00453CAD      B8 143D4500   mov   eax, CrackMe0.00453D14                        ;ASCII "ok"
00453CB2   .E8 CD36FDFF   call    <CrackMe0.D7.Dialogs.ShowMessage(AnsiString);>

原型是:

00453CA8    E8 07FDFFFF   call    CrackMe0.004539B4
00453CAD    EB 08         jmp   short CrackMe0.00453CB7
00453CAF    90            nop
00453CB0    90            nop
00453CB1    90            nop
00453CB2    E8 CD36FDFF   call    <CrackMe0.D7.Dialogs.ShowMessage(AnsiString);>
00453CB7    33C0            xor   eax, eax

构造精巧,不过,有一份正版就能破解了

感觉天下一家,在fonge's crackme10.X中有类似代码.看来这种方式是加密成长的必经之路了!

fonge 发表于 2007-3-7 17:10:54

原帖由 黑夜彩虹 于 2007-3-7 16:58 发表


作用:动态改变程序运行的罗辑


怎么个动态法?
我用过

0045486E   . /75 0A         jnz   short 0045487A               
00454870   . |C705 9C4A4500>mov   dword ptr , 000003EB

动态在地址45A9C处写入000003eb

而549那段代码我至今没看明白
加一个详细的功能调用注释吧!

黑夜彩虹 发表于 2007-3-7 17:19:45

老实说,549那东东我也不是很清楚,只会用。。。。

下面引用他的原话:

某天,有个想法,今天实现之
想法很简单,在程序启动的时候,读一个补丁文件,用来动态改变程序运行的逻辑

补丁文件格式如下

address1,patch code1

address2,patch code2

……

由于寻找address比较麻烦,尤其是代码删改以后,address都要重算,为了解决这个问题,采用了自动生成address的方法,即:得到某代码的offset,用前面写的geteip函数,通过这个eip,加上一个相对便移量,就得到了patch address,由于const是保存在栈上的,因此增删const offset,对程序没有影响

fonge 发表于 2007-3-7 17:20:39

:lol:

原帖由 不懂算法 于 2007-3-7 16:00 发表
你去用我在crackme版贴那个注册码,然后跟踪就知道怎么回事了

也不会知道是怎么回事,因为我跟本没有往算法call里面走!;)

谢谢兄弟指点!


_____________________________________________________________

黑夜彩虹 发表于 2007-3-7 17:25:42

往算法Call走进,也是白走,因为根本是一个陷井~~

就是要引诱Cracker走进去的~~:lol:

fonge 发表于 2007-3-7 20:32:24

原帖由 黑夜彩虹 于 2007-3-7 17:25 发表
往算法Call走进,也是白走,因为根本是一个陷井~~

就是要引诱Cracker走进去的~~:lol:

所以还要后面继续走!



固定注册码前8位指向SMC的地址,后面是参与patch的data,而这个data是经过运算得到的




;)
彩虹也被549忽悠了


设a='长度为25位的字串'
生成值定值b=md5(a)

然后我们找一段关键代码code,
把这段关键code每一位与这个md5(a)的某一位异或,得出data,(这个时候要逆回code只要将data的每一位和b的相应位xor就可以了)

编程的时候只需要把data写入到软件中去就可以了,
然后要求输入一个值N
注册成功即是data xor md5(N)相应位来还原code并执行这段code代码,


这个code未知,想要追出这个md5(n)难啊,而要找出这个N更难!
那真的做到无法破解了(549就是这个意思)/fad

就是因为这个原因,所以在出现现在的对称算法,签名算法,
才有所谓的一机一码的概念!

当然,549的这种加密结构很漂亮。

caterpilla 发表于 2007-3-7 20:48:04

学习。。。。。。

黑夜彩虹 发表于 2007-3-8 08:14:29

原帖由 caterpilla 于 2007-3-7 20:48 发表
学习。。。。。。

惊涛兄,不要光学习。。,要有行动啊,期待兄弟的加入~~~:lol:

梦里水香 发表于 2007-3-8 09:39:49

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00404272 in module 'Project1.exe'. Read of address 0000F500'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
出来ok后,又弹出这个错误了。把你的源代码里像if PatchItem <> '' then
[]里加个空格 :PatchItem不然代码就丢失了

fonge 发表于 2007-3-8 11:00:11

是哪种丢失,delphi内置的优化吗?
我也老是遇到delphi内置的优化把想要的代码del了
页: 1 [2] 3
查看完整版本: Crackme01