|
[讨论]这赚KX就好比是考了个公务员,想熬到头,那难啊
我感觉到有事情要发生。 |
|
[调查]大家每天都多长时间在线呢?
汗。。。难道为了几个kx还要装按键精灵? |
|
[讨论][求助]唉、。。终于挨到24小时。。发个言先@!
欢迎欢迎,我也是新加入的,呵呵,大家一起学习,共同进步~ |
|
[求助]破解易语言的全过程[申请激活码]
哈哈,挺有意思的。 |
|
[原创]自己写了个很恶搞的CRACKME
我拿C32asm打开查看了一下字符串,就直接删了。。。。汗。。。lz太邪恶了 |
|
[原创]纯汇编CM[邀请码已发]
先运行一下,用户名输入”xiilin”,序列号输入”1234567”,点击Test,窗口刷的一下不见了…… 用peid查一下壳吧,ASPack 2.001 -> Alexey Solodovnikov,直接拿出AspackDie脱掉,再查,MASM32 / TASM32,不过文件大了很多……36KB了,呵呵,运行一下,没问题,那就OD载入吧。 先Ctrl+N查看一下输入表,看到了熟悉的GetDlgItemTextA,哈哈,bp GetDlgItemTextA下断点,F9运行起来,输入用户名”xiilin”和序列号”1234567”,点Test,断下来了,本来想Alt+F9返回用户的领空却失败了……不知跳到哪儿去了…… 汗,那换个方法吧,Alt+M打开内存窗口,对用户程序的.text区段下一个内存访问断点,然后F9让程序跑起来,断在了004010FA这里,这里就是我们要找的地方了,看一看: 004010E3 |. 68 FF000000 push 0FF 004010E8 |. 68 54304000 push 00403054 004010ED |. 68 E9030000 push 3E9 004010F2 |. FF75 08 push dword ptr [ebp+8] 004010F5 |. E8 18010000 call <jmp.&user32.GetDlgItemTextA> ;获取用户名 004010FA |. 0BC0 or eax, eax 004010FC |. 75 16 jnz short 00401114 ;用户名不为空就跳 004010FE |. 68 00304000 push 00403000 00401103 |. 68 EA030000 push 3EA 00401108 |. FF75 08 push dword ptr [ebp+8] 0040110B |. E8 1A010000 call <jmp.&user32.SetDlgItemTextA> ;提示输入用户名,这里有个小bug,第二个参数应该是3E9而不是3EA 00401110 |. C9 leave ;可以试一下,如果你不输入用户名,那么提示将会出现在序列号输入框里 :-) 00401111 |. C2 1000 retn 10 00401114 |> 68 FF000000 push 0FF 00401119 |. 68 58304000 push 00403058 0040111E |. 68 EA030000 push 3EA 00401123 |. FF75 08 push dword ptr [ebp+8] 00401126 |. E8 E7000000 call <jmp.&user32.GetDlgItemTextA> ;获取序列号 0040112B |. 0BC0 or eax, eax 0040112D |. 75 16 jnz short 00401145 ;序列号不为空则跳 0040112F |. 68 11304000 push 00403011 00401134 |. 68 EA030000 push 3EA 00401139 |. FF75 08 push dword ptr [ebp+8] 0040113C |. E8 E9000000 call <jmp.&user32.SetDlgItemTextA> ;提示输入序列号 00401141 |. C9 leave 00401142 |. C2 1000 retn 10 00401145 |> 68 54304000 push 00403054 0040114A |. 68 48304000 push 00403048 0040114F |. E8 A0000000 call <jmp.&kernel32.lstrcatA> ;用户名前面加上"pediy"字符串 00401154 |. 68 58304000 push 00403058 00401159 |. 68 48304000 push 00403048 0040115E |. E8 97000000 call <jmp.&kernel32.lstrcmpA> ;在这里进行比较 00401163 |. 0BC0 or eax, eax 00401165 |. 75 1F jnz short 00401186 ;验证失败,跳走 00401167 |. 6A 00 push 0 00401169 |. 68 2B304000 push 0040302B 0040116E |. 68 3A304000 push 0040303A 00401173 |. 6A 00 push 0 00401175 |. E8 A4000000 call <jmp.&user32.MessageBoxA> ;成功 0040117A |. 6A 00 push 0 0040117C |. FF75 08 push dword ptr [ebp+8] 0040117F |. E8 88000000 call <jmp.&user32.EndDialog> 00401184 |. EB 59 jmp short 004011DF 00401186 |> 6A 00 push 0 00401188 |. FF75 08 push dword ptr [ebp+8] 0040118B |. E8 7C000000 call <jmp.&user32.EndDialog> ;失败 00401190 |. EB 4D jmp short 004011DF 如果爆破那就很简单了,将00401165处的jnz改成nop,程序就跳不走了,那么试着追一下注册码吧。 本来我还觉得很简单的,但是真仔细一想,我就蒙了,仔细看一下,00403048这个地址存放的是字符串'pediy'和一个代表结束的0,00403054存放我们输入的用户名,00403058存放我们输入的序列号,那么万一我们输入的用户名不止四个字节呢?例如我输入了xiilin,那么00403058和00403059两个字节就存放了‘i’和‘n’,然后再读取我们的密码,这两个字符就被覆盖掉了,画一下现在数据在内存中的布局吧: 00403044 6F 64 21 00 70 65 64 69 79 00 00 00 00 00 40 00 od!.pediy.....@. 00403054 78 69 69 6c 31 32 33 34 35 36 37 00 00 00 00 00 xiil1234567..... 00403064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 当我们执行到0040114F这一句的lstrcatA的时候,事实上是将xiil1234567这个字符串0040304D这个地址之后,然后再最后添加一个0作为结束标志,那么内存中就变成了这样: 00403044 6F 64 21 00 70 65 64 69 79 78 69 69 6C 31 32 33 od!.pediyxiil123 00403054 34 35 36 37 00 32 33 34 35 36 37 00 00 00 00 00 4567.234567..... 00403064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 也就是说在执行lstrcmpA之前,真正的注册码就已经变成了pediyxiil1234567,但是如果我们输入pediyxiil1234567呢?注册码就又变了……因为我们输入的注册码也参加了运算——在计算真正的注册码的时候需要使用我们输入的注册码,那么换一句话来说的话也就是我们永远不可能输入正确的注册码!!当然在某种情况下这样说是不准确的,例如我们的用户名不超过三个字节,那么我们输入的注册码变不参与运算了,那就简单了,例如用户名输入1,那么注册码就是pediy1,用户名输入123,注册码就是pediy123,用户名一旦大于三个字节,那么我们就得不到正确的注册码了…… 看看源代码吧,作者在inc文件中是这样写的: .data ;…… serial db 'pediy' .data? hInstance dd ? id dd ? code dd ? 这里就是越界的根源了,大概作者也没想到会出现这种诡异的情况吧?修改一下: .data ;…… serial db 'pediy',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;添加了21个0 .data? hInstance dd ? id db 21 dup(?) code dd ? 这样再编译一下的话,用户名就可以达到20个字节了,试一下,用户名输入xiilin,序列号输入pediyxiilin,验证成功。 顺便总结一下遇到的问题,希望路过的高人给能解答一下: 1、程序停在GetDlgItemTextA的断点处后,用Alt+F9为什么回不到程序的领空了?一定要给.text区段下访问断点才行么?还有什么办法快速回到程序的领空? 2、为什么有些call必须F7跟进去,如果用F8跟过去的话,程序直接就跑丢了……我也不知道跑到哪儿去了,反正肯定不是正常情况时的下一行,例如本例中0040114F处的lstrcatA和下一个lstrcmpA,难道必须每一个call都F7跟进去么?还有什么别的办法可以跳过去这些call而且程序跟不丢?这些call为什么会这样? ----------------------------------------------------------------------------------------------------------------- 我只是初学,如果你发现以上分析有什么不对的地方的话,希望能够指出,谢谢! |
|
[讨论]这样学电脑的人,为什么都说他是傻瓜
他会人工修改windows的注册表来达到自己的目的,他会自己做属于自己的系统,他会免费帮网城做无盘系统。他会在linux下用c++开发。他也会在windows下用c++开发。他给做过s60v3的手机软件,他用j2me做个手机游戏,他还用jsp(包括ssh),asp,php做个网站,他也用flash用动画,他用汇编读取coms的信息,他自个写个可以直接更具sql 2000的数据库文件 读取出sql代码.他也会网络安全,两个月前,他刚把五月花的论坛bbs.55it.com给......他破解过一些win32的应用软件,他也破解过手机游戏,还破解过s60v3系统的证书权限.......他电脑上没有一部电影电视剧,更没有游戏。他自己架私服 如果只从这些来看,他绝不厉害,会修改注册表算厉害么?“他会自己做属于自己的系统”?自己写操作系统?还是自己打包做一个XXX版Ghost XP sp3?这算厉害?这一点还有下一点所说的“做无盘系统”的教程网上多的很。c++开发?开发了什么?是MySQL还是HelloWorld?。。。。。。。。。。破解s60v3系统的证书权限?是他首发的么?我baidu了一下,在http://bbs.dospy.com/thread-1656975-1-1.html看到一篇傻瓜式教程,虽然我根本不懂手机,但是我也能做到……至于架私服。。。建议lz去搜一下吧,架设一个完整的4f的视频教程都能找到。。。又不用自己写游戏,只架4f很简单的。。。。。 仔细地看了一遍lz所列举的“壮举”,我很遗憾的发现,这根本没什么实质性内容,此人学的东西很杂乱,没有哪一点是深入学习了的,我认为完全是浪费时间,不如把时间花在打基础上,例如“他会自己做属于自己的系统”,我认为他或许根本不知道操作系统的引导过程,根本不知道07c00h地址是干什么的,根本不了解保护模式,根本不知道内存分页……与其把时间花在D版别人的OS上,倒不如自己去认真学一学OS,不如认真去读一下Linux源代码。 很抱歉,我又给泼凉水了。。。。。。但是lz描述的这个人让我非常生气,一个这么大年纪的男子汉,不知道为父母分担一些负担,居然就这么心安理得地去做自己的事情,而且还走错了路!学了一些根本没什么用的东西!就凭这些东西能找到什么工作?什么都只是知道皮毛(甚至有些连皮毛都没摸到),没有公司会聘请这种人! |
|
[求助]关于SE_SHUTDOWN_NAME这个常量的问题
汗,没有人遇到过这种情况么? |
|
[原创]编写手机病毒(申请邀请码)
原创?我怎么记得大概两个月前我见过这篇文章呢?貌似在一个我rss订阅的blog里,等有空找找看。 |
|
[求助]俺是新人
不,你是情人!!别以为我不认识你 :-) |
|
|
|
[求助]谁发个crackme连带源码的..让小弟学学?
lz可以下载加密与解密的光盘,那里面有一些,带着源代码。 :-) |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值