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了