首页
社区
课程
招聘
[旧帖] [分享][分享]发一个简单的keyfile (给个邀请码吧) 0.00雪花
发表于: 2010-9-10 14:20 959

[旧帖] [分享][分享]发一个简单的keyfile (给个邀请码吧) 0.00雪花

2010-9-10 14:20
959
这是PEDIY CrackMe 2007.chm 中 keyfile系列的第7个,期间参照作 者: starluck的文章,终于算弄明白了,这个keyfile的算法、流程,这是我的第一篇破文,给自己一个交代,正象starluck说的,鼓励自己,本来,破解就难(对我这样的人),没有信心,没有勇气,没有毅力,多数就放弃了,只有自己给自己信心,勇气,毅力,一句beyond的 “哪会怕有一天,你共我”,好,开始,

    载入DueList2.exe 后,光标停在 0040 1000 处,当然我们现在是 作keyfile肯定
在某处会有 一个 keyfile 文件(文件名 不一定是 keyfile),先在反汇编区 右键
-搜索-所有参考文本串,有一行

0040106E push  DueList2.00402079  ASCII "due-cm2.dat" 应该在某个文件夹在(多数在当前文件夹)下有个文件作为keyfile,这里是 due-cm2.dat,可以验证,我在这里有用F2下断点两处 -- CPU初始处 还有下面的--

004010FE  push DueList2.00402086  ASCII "Your current keyfile is invalid... Please obtain a valid one from the software author!"
点F9运行,程序被OD断了下来在, 00401052 处 如果你有经验,应该知道这是载入光标(的函数),不管,F8步过,到00401073处,这里,要留心,如果,这时,你还没在,当前目录下 建立 一个keyfile,文件名为 "due-cm2.dat"(引号不算),那,过了这句,
00401073    .  E8 0B020000   call <jmp.&KERNEL32.CreateFileA>             ; |\CreateFileA
下句, 00401078 83F8 FF cmp eax,-1

   就是比较当前文件夹下有没有due-cm2.dat,-1代表没有,eax为函数CreateFile读取文件due-cm2.dat的句柄,
下句jnz 不等(即有文件),你建立了due-cm2.dat(用winhex建立,记事本也可以),就跳到下面,否则,程序给出错误信息,然后退出,想试试吗,你先不建立文件,看看情形,试试,你建立了,那往下走,到
                                       
0040109A,又一个函数,ReadFile(),

  读取文件内容,你建立的due-cm2.dat(什么,你没建立文件,那根本就走不到这),里有内容吗,没有,也是要退出的,还是用winhex打开due-cm2.dat,往里面加些16进制数吧(其实不管你填入的是字符,数字,还是什么,winhex都显出16进制数,当然ascii区有字符显示),先别管加的是什么,一点一点来,不行就重来,我这到了
       
         004010B0    .  75 02         jnz short DueList2.004010B4
F8 跳到下面 004010B4

004010B2    .  EB 43         jmp short DueList2.004010F7
004010B4    >  33DB          xor ebx,ebx
004010B6    .  33F6          xor esi,esi
004010B8    .  833D 73214000>cmp dword ptr ds:[402173],12

004010B8 这句 比较文件due-cm2.dat 里有几个字节 注意是16进制数 12H =18
(10进制的18),小于也 (从0040 10F7)退出,offset(偏移) 004010C1 到--004010D1
一个循环,期间循环取文件due-cm2.dat里每一个字节,顺序取,放到al里,如果al=0,比较esi=2成立不?不成立,jmp到 0040 10F7,退出。这段代码是
注意这句:004010C7    .  3C 00         cmp al,0  
          004010C9    .  74 08         je short DueList2.004010D3
比较 al是不是=0,即判断文件读取完,或12H个字节中间有 0x00一个字节截断,后面不管了,然后跳到 004010D3 ,
004010D3    >  83FE 02       cmp esi,2
004010D6    .  7C 1F         jl short DueList2.004010F7
再判断esi是不是=2,即12H(18)个字节中读取的字节里0x01,是否 >=2 个,没有
跳到 0040 10F7,退出,
起先,我先在12H字节前2 个就是0x01,0x01,结果,程序立马退出,好半天,才明白,就在12H后面写0x01,0x01,如果你走到了
004010DC    >  8A83 1A214000 mov al,byte ptr ds:[ebx+40211A] 到
004010ED    .^ EB ED         jmp short DueList2.004010DC
又一个循环,
即判断al=0时,即用0x00字节截断12H字节(或 判断文件读取完),直接比较esi=1D5,或者al=1时,即用0x01字节截断12H字节,再比较esi=1D5,esi其实eax循环相加的结果赋给esi,我这里的填入的是

1D 1D 1D 1D 1D 1D 1D 1D 1D 1D 4D 49 01 01 05 D9 D4  (注意,这里是16进制数),

   如果是在记事本中显示就是  MIÙÔ ,这是因为记事本显示的是字符ascii,
我这里0x01 在offset 0D位置处,起先我错误的把10进制 16进制弄混了,想用 1D5 除以 1D 刚好 余下5,商是 10即 A,当然这是错误的,所以就在0A前都用1D填充了,其实这也没算对,还有个00位置忘算了,写下错误,想 ,可能对我,以后是个教训,算了半天,A+1=B 个1D, B×1D=13F (H),1D5-13F=96 (H),还有0C,0D位置,一平均,96H除以2=4B (H),这里H是16进制单位标志,干脆4D 和49吧,加起来 也= 96 H, due-cm2.dat 文件用winhex填充了吗,好,继续,如果esi =1D5 ,将会je 到 00401114 处往下走到,
0040113C处,到0040114D      之间又一个循环,
注意,这里00401139 的inc ebx,递增,使得,取12H个字节时,从0x01,0x01后面,算起,并计算eax的值是否= 1B2,我这里是
05+D9+D4=1B2,如果不=1B2,跳入0040 10F7处退出,= 1B2,即成立,

   这个是我的过程,叙述语言有点,乱,不好意思,水平有限,错误之处,诚心 恳请 高手们 指正,先谢谢了,打包中有我的keyfile,无毒,请放心,不过, 我都是在网吧上网,条件限定,如果有毒,也是在网吧染的,请各位,还是事先查毒,杀毒,我不经常上网,只有把该下的资料下到U盘带回来,才能继续,

  如果,你有跟我联系,我可能不能及时,同你联系,最好给我发 Email:zhanfei3000@sohu.com
写破文,真累,你分析的时候,先不要,把 due-cm2.dat,解压,就不会注册 成功,具体,自己琢磨吧,
                                       
                        2010/09/08
                        zhanfei3000  (看雪帐号)
                Email: zhanfei3000@sohu.com
                QQ:    632014634
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//