易优2注册码分析和爆破
来源:互联网 发布:数控编程代码案例 编辑:程序博客网 时间:2024/06/05 07:17
【文章标题】: 易优2注册码分析和爆破
【文章作者】: lrw
【作者邮箱】: lrwtemp@gmail.com
【软件名称】: 易优2
【软件大小】: 6.5M
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: VB6
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
应一个同事要求解的,我自己也不知道这软件是做什么用的。看标题是说一个GSM 信息管理软件
安装好后,先用PEID扫描,提示是VB5/6编写的。没有加壳,倒省了不少工夫。
运行程序,提示软件过期,要我们填写注册码。随便填了11111111(8个1),提交后软件要求重启验证,没有任何提示信息,没有办法,只好重启软件。
重新运行程序,这次是提示“授权文件“有误,看来注册码是存放在文件中的了,于是到安装目录下乱翻,看到config目录下有个Credit.dat,看来倒长
得和注册文件倒有点像,用UltraEdit打开,发现刚才我们填写的注册码正乖乖地躺在里面,可以肯定这是注册码存放文件了。
运行OD,打开EOES2(软件主文件),试着在API参考中搜索msgbox、CreateFileA、OpenFile之类的,但是没有找到。(没有办法,我对VB程序不熟,只好
祈求上天能给我个好运) 再搜索字符串,也没有找到刚才提示的“过期”、“授权”之类的字样,失望而归。由于不知道该在何处断(以前记得有说可以用
vbastrcmp之类的作为断点,但是我想这VB过程中应该有不少的字符比较吧,这样找起来太繁了,没有尝试),于是稍作休息,想起在字符串里找Credit.dat,
呵呵,这次终于找到两个地方,猜测一个是读取用,一个是写入用的了。双击字符串到调用的地方下断。在OD中运行EOES2,果然被拦下来了。连续按F8,注意
看堆栈变化,可以很快看到我们填写的伪注册码会冒出来,在出现伪注册码的地方加断点,以便下次直接到达。
00A7C0D1 . 6A 30 push 30
00A7C0D3 . 68 A0894300 push 004389A0
00A7C0D8 . 52 push edx
00A7C0D9 . 50 push eax
00A7C0DA . FFD6 call esi
00A7C0DC > 8B55 E4 mov edx, [ebp-1C] ; 到这里会显示出我们的伪注册码
00A7C0DF . 8D4D E8 lea ecx, [ebp-18]
00A7C0E2 . C745 E4 00000>mov dword ptr [ebp-1C], 0
一直F8下去会出现警告框,提示“授权文件”出错,点击确定,返回OD后停留在
00A7B54E . E8 AD010000 call 00A7B700
00A7B553 . 8B55 D8 mov edx, [ebp-28]
00A7B556 . 52 push edx
00A7B557 . E8 D4030000 call 00A7B930 ; 这一个call里提示错误
00A7B55C . 66:393D D8F3A>cmp [A7F3D8], di ; 点“确定”后返回此处
00A7B563 . 0F85 A1000000 jnz 00A7B60A
00A7B569 . 393D 08F6A700 cmp [A7F608], edi
00A7B56F . 75 10 jnz short 00A7B581
于是初步认定在00A7B557 call 00A7B930这里需要进行分析,在此处下断,运行到后F7进入00A7B930
F8到
00A7B985 . 8B55 08 mov edx, [ebp+8]
00A7B988 . 8D4D D4 lea ecx, [ebp-2C] ;我们的输入的注册码会在这里出现
00A7B98B . FF15 74124000 call [<&MSVBVM60.__vbaStrCopy>] ; MSVBVM60.__vbaStrCopy
00A7B991 . 6A 01 push 1
00A7B993 . FF15 C0104000 call [<&MSVBVM60.__vbaOnError>] ; MSVBVM60.__vbaOnError
00A7B999 . 66:8935 D8F3A>mov [A7F3D8], si
00A7B9A0 . 8975 D8 mov [ebp-28], esi
00A7B9A3 . 33DB xor ebx, ebx
00A7B9A5 . 8B3D 08134000 mov edi, [<&MSVBVM60.__vbaStrMove>] ; MSVBVM60.__vbaStrMove
00A7B9AB > B8 06000000 mov eax, 6 ;留意处此了,赋予eax=6
00A7B9B0 . 3BD8 cmp ebx, eax ;观察ebx,可以发现开始为0
00A7B9B2 . 0F8F DF000000 jg 00A7BA97
00A7B9B8 . 83FB 08 cmp ebx, 8
00A7B9BB . 72 06 jb short 00A7B9C3 ;下面一句是产生错误了
00A7B9BD . FF15 34114000 call [<&MSVBVM60.__vbaGenerateBoundsE>; MSVBVM60.__vbaGenerateBoundsError
00A7B9C3 > A1 C8F3A700 mov eax, [A7F3C8]
00A7B9C8 . 8D0C98 lea ecx, [eax+ebx*4]
00A7B9CB . 51 push ecx
00A7B9CC . E8 2FBAFFFF call 00A77400
00A7B9D1 . 8BD0 mov edx, eax ; 呵呵,在上一个call后,我们在这里看eax的值怎么看都像注册码,试着把00A7B9D1那里得到的eax的值复制出来
继续F8,下面不远就到了
00A7BA3B . 8BD0 mov edx, eax
00A7BA3D . 8D4D C8 lea ecx, [ebp-38]
00A7BA40 . FFD7 call edi
00A7BA42 . 50 push eax ; 看到下面的__vbaStrCmp了没有,比较啊!!在下一句中查看堆栈的,可以发现有我们输入的伪码和刚才看到的类注册码物体
00A7BA43 . FF15 40114000 call [<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
把得到的类注册码物体复制出来,填写进注册那里,提交,关闭,直接运行程序,倒,还是提示错误,莫非还有第二次比较?
留意下程序在注册那里提示的要求我们发送给他们的注册信息:
CDBF4689AA45C1B29B0C63A1AAF32CD2,A76530E9C6060D7B2E88AD1B5C390276,FC1FD7DE8A89B256E0A7FCEB10A30172,5CFAF91D9939DBC726030556AA92E9D5,EA27F403F21B2990D2D526A8B6A61BBE,7215EE9C7D9DC229D2921A40E899EC5F,FAE1FE85D425EA8A3FEF932246077017
是用逗号分隔,共有7段,看回00A7B9AB处,赋予eax为6,比较是否大于6,倒和这个很像,不管了,就在注册码那里填写进“1,2,3,4,5,6,7”,设定断点在00A7BA42处,重新用OD跟踪,到达00A7BA42时,
查看堆栈,发现居然与进行比较的字符串居然是1,哈哈,果然是使用逗号分隔多个注册码段的。把第一个比较的注册码记录下来,F9继续第二次到达这里,再记录第二次注册码,
依次记录下7个注册码,F8继续下去,发现下面还有一个地方是比较的
00A7BB12 . 8BD0 mov edx, eax
00A7BB14 . 8D4D C8 lea ecx, [ebp-38]
00A7BB17 . FFD7 call edi
00A7BB19 . 50 push eax ;下面是最后一个比较了,同样可以在堆栈中找到注册码
00A7BB1A . FF15 40114000 call [<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
把记录下来的这几个注册码填写Credit.dat,用逗号分隔,重新运行程序,可以发现没有错误提示了。
但是后来换了台机,发现注册码就不一样了,看来是与硬件有关,那就试下爆破吧。
通过简单跟踪,很容易发现这个过程中,其实在注册码的比较过程中不相符程序是不会直接退出的,也就是说7次比较的结果错误都没有所谓,关键是最后返回前不能出错。
00A7BB49 837D D8 05 cmp dword ptr [ebp-28], 5
00A7BB4D 7E 1E jle short 00A7BB6D ;如果注册码比较过程中有错,此处会跳转,nop掉
00A7BB4F . 66:85F6 test si, si
00A7BB52 74 19 je short 00A7BB6D ;同样nop掉这里,让它直接到下一句
00A7BB54 . 66:C705 D8F3A>mov word ptr [A7F3D8], 0FFFF
00A7BB5D . FF15 B0104000 call [<&MSVBVM60.__vbaExitProc>] ; MSVBVM60.__vbaExitProc
因此,只要修改上面的两处地方,然后注册码里填写1,2,3,4,5,6,7,8(忘记是不是这么多位了,写多无碍),运行程序就可以正常了。
由于这个软件我也不知道有什么用,所以也不清楚爆破后是否有问题。
但是如果有问题的话我们完全可以取得注册码,用注册码去注册,这样就肯定不会出问题了。
末了,发现原来调试中有个rtcMsgBox和rtcDir可以作为断点。
--------------------------------------------------------------------------------
【经验总结】
VB程序我第一次用OD跟完整,不过幸好这个软件的反破能力不强,注册码比较过程也比较松散,而且是明文比较,所以跟得
还算顺利,唯一不熟的是API函数断点,不知道用哪个才能快而有效地到达,不过看来找到一个读写文件的地方,然后用F8
跟踪到出错的地方,倒也还是一个办法。
--------------------------------------------------------------------------------
【版权声明】: 本文为lrw原创, 转载请注明作者并保持文章的完整, 谢谢!
2007年06月25日 8:51:51
- 易优2注册码分析和爆破
- 爆破注册码注册
- Glary Utilities 爆破分析
- HexEdit 3.0爆破+部份分析
- 爆破。
- GIFMovieGear4.2注册码算法分析+注册机
- DZ自动爆破工具原理分析
- WordPress 利用 XMLRPC 高效爆破 原理分析
- 爆破的思路和断点的设置
- 黄河flash播放器绿化与爆破分析
- 某QQ群发大师2010版爆破分析
- 【python】线程池ThreaPool-多线程mysql爆破+源码分析
- Myeclipse下载和注册码
- VMware安装和注册码
- PLSQL_Developer 下载和注册码
- 英语朗读技巧--连读和不完全爆破
- tomcat防止用户名和密码爆破的一种方法
- geoserver防止用户名和密码被爆破的一种方法
- SNIFFER(嗅探器)-简介
- 人类四大天性
- "Sys 未定义"
- 程序状态决定软件质量
- 2006年信息产业部ERP管理咨询师试题
- 易优2注册码分析和爆破
- 168教数据库中表的关系
- 2005年信息产业部ERP管理咨询师考试试题
- 关于ASP.NET在IIS一些问题的经验总结
- BSD socket
- JScript 字母顺序的关键字列表
- 走出了一步,不知道是否真的是应该的~
- ASP.NET下如何防范SQL注入式攻击
- Microsoft Windows DirectSpeechSynthesis Module MS07-033 EXPLOIT