写之前先说点废话(谁扔的香蕉皮,鸡蛋^^^^^^^^^^^):
ollydbg是个功能强大的软件,以前我也不用他(不习惯),而且很多经典教程都是用trw和softice作为示例工具写的.
初学者(注:和我一样的人)往往一开始就接触这些工具,做练习也就用这些工具!可以说已经上手了!
对ollydbg的动态调试功能也就陌生了!
现在一个很现实的问题让我改变了习惯,我的键盘鼠标是usb的,显示器也给我作对!trw和softice都用不成!
无奈只好学用ollydbg.发现这个东西实在太好了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*动态调试的时候还能听歌聊天泡MM(TRW,SOFTICE只能对黑屏)
*调试方便,又有函数参考,可以随意加注释,轻松复制,清楚看到堆栈的变化^^^^^^^
*界面优美,可以随意设置背景颜色!
*有强大的右键功能,使用起来特别方便!(特别适合老人小孩使用~~~~)
*说不出来了~~~其他的优点你自己去发掘吧!!!
我是一只大菜鸟,接触破没多长时间,脑子也不怎么灵光,水平低得可怜,说的不对的地方请高手指正!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OLLYDBG简介~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现在就让我这只菜鸟给菜鸟们介绍一下:
1*工作界面:(我们从上往下看)
看到标题栏,菜单栏和工具栏(不用让我做名词解释了吧!)
记住:工具栏的所有功能都能在菜单栏里找到,工具栏是菜单栏的快捷按钮(废话!)
各项详细功能我们在下面说!
再往下看有四个窗口他们是代码窗(左上),寄存器窗口(右上),内存窗口(左下)和堆栈窗口(右下)
2*菜单栏各项命令功能
*文件(F)----这些命令用说吗?
|____注意**该菜单的下部有你上次打开的纪录,该纪录保存有你上次未清除的断点**注意**
*查看(V)------这个菜单我只介绍一下我常用的,别的我不会!:-)
|____执行模块(快捷键ALT+E):查看该程序使用的动态连接库(我的理解)
|
|____断点(快捷键ALT+B):这个是查看你所有的断点,(有时自己设到哪里都忘了,可以看一下)起到一个辅助功能.
我就会这么多!:-(
*调试(D)-------这个菜单是关键,不明白你就别调试软件了!也只说常用的!
|_______运行(F9)加载程序后,运行!
|
|_______暂停(F12)
|
|_______单步进入(F7)遇见CALL就进!进入该子程!行话:"跟进去"
|
|______单步跳过(F8)遇见CALL不进去!不去管子程的内部!第一次粗跟的时候常用!
|
|______执行到返回(ALT+F9)就是执行到该子程的返回语句!
剩下的菜单不重要~我也不费口舌了~~~我是"天下第一懒"(乾隆皇帝赐给我的名号)
知道这么多就能开工了~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~实例分析~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
目标:FlashPT 2.1 Build 3067
破解人:winroot
工具:PEiD,W32DASM,ASPACKDIE,OLLYDBG
目的:一篇ollydbg的教程,软件相对简单!
下载地址:http://www.softreg.com.cn/shareware_view.asp?id=/4C7E305E-226A-43B9-98D2-BE0410D46806/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~破解过程~~~~~~~~~~~~~~~~~~~~~~~~~~~~
破解过程:
该软件安装后有3各组件随便注册哪一个都一样.
我选择Flash转换解密
1*PEiD查壳,ASPack 2.12 -> Alexey Solodovnikov
2*使用ASPACKDIE脱壳.脱壳后文件名为unpacked.exe
3*使用W32DASM反编译进行静态分析!
加载unpacked.exe-->反编译-->点菜单栏的"参考"选择字符串数据参考
找到"注册码错误,请重新输入!"双击我们来到
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004D1174(C)
| ~~~~~~~~~~~~~~~~~~~~是从这里跳过来的,我们就到这里看看
:004D120D 6A00 push 00000000
* Possible StringData Ref from Code Obj ->"提示"
|
:004D120F B974124D00 mov ecx, 004D1274
* Possible StringData Ref from Code Obj ->"注册码错误,请重新输入!"
#######################我们来到了004D1174#############################
:004D116B 8B55E4 mov edx, dword ptr [ebp-1C]
:004D116E 58 pop eax
:004D116F E8C42CF3FF call 00403E38
:004D1174 0F8593000000 jne 004D120D ;看到了吧!就是从这里我们走向了死亡!
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
:004D117A B201 mov dl, 01
:004D117C A1DCCA4400 mov eax, dword ptr [0044CADC]
:004D1181 E856BAF7FF call 0044CBDC
:004D1186 8BD8 mov ebx, eax
:004D1188 BA02000080 mov edx, 80000002
:004D118D 8BC3 mov eax, ebx
:004D118F E8E8BAF7FF call 0044CC7C
:004D1194 B101 mov cl, 01
* Possible StringData Ref from Code Obj ->"software\microsoft\windows\currentversion\chan"
->"gid"
|
:004D1196 BA98124D00 mov edx, 004D1298
:004D119B 8BC3 mov eax, ebx
:004D119D E83EBBF7FF call 0044CCE0
:004D11A2 84C0 test al, al
:004D11A4 745E je 004D1204
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~省略部分代码
* Possible StringData Ref from Code Obj ->"提示"
|
:004D11E2 B974124D00 mov ecx, 004D1274
* Possible StringData Ref from Code Obj ->"注册成功!谢谢您使用本软件!
程序需要重新启动"
~~~~~~~~~~~~~~~~~~~~~~~~~~*****爆破******~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
爆破就是爆着破:-)
看一下我们的分析:
:004D1174 0F8593000000 jne 004D120D ;看到了吧!就是从这里我们走向了死亡!
那我们就不走这里了!他jne我们就改成je
*开工!!!!!!!!!!!
*首先,运行ollydbg加载脱壳后的unpacked.exe找到地址004D1174
004D1174 0F85 93000000 JNZ UNPACKED.004D120D
咦!!!!!!!怎么变成jnz了?(我也不知道为什么)但他与爆破无关!我们把他改成jz就能起到一样的效果
1)我们双击这里: JNZ UNPACKED.004D120D是改变它的汇编代码___________________注{
2)我们把他改成JZ 004D120D 点汇编后,他就变红了 再点取消! {
3)然后右键单击JZ 004D120D选择"复制到可执行文件" {双击地址栏是绝对地址和相对地址的转换
4)这时弹出一个窗口最上面就是000D1174 0F84 93000000 JE 000D120D { 例如:我们双击004D1174 就会变成$ ==>
我们再右键单击JE 000D120D选择"保存文件" { 双击机器码栏就是设这个地址为断点
5)输入你设想的文件名就可以了 {例如:双击0F85 93000000我们可以看到变红了
6)运行,呵呵!!已注册! {说明我们已经把004D1174设置为断点再双击就恢复
~~~~~~~~~~~~~~~~~~~~~~~~~***爆破结束***~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
经过上面的过程
如果你觉得不过瘾就到注册表HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\changid
删除该键的键值(如果已注册没注册就不用了)
我们继续这次我们要动态分析了~~
################################动态分析###################################
动态分析的前提就是静态分析,我们回过头看一下静态分析的结果
:004D116B 8B55E4 mov edx, dword ptr [ebp-1C]
:004D116E 58 pop eax
:004D116F E8C42CF3FF call 00403E38 //这个是比较的call
:004D1174 0F8593000000 jne 004D120D
那么我们就在004D116B设置断点吧~~~
F2或者双击机器码栏设置断点---F9(运行)--输入用户名winroot,获取ID,ID号码4835812338,点击注册,
程序被OLLYDBG拦截,
乖乖~~
你猜我们看见了什么!!!!一串数字耶!!!3230027325再往右下看堆栈窗口一行ID号码4835812338,一行3230027325
你看他那张脸,长得都像注册码~~~
退出来试一下~~~你快看我的脸 :-)
呵呵~~~~成功~~~
内存注册机你就自己作吧~锻炼一下!
##################################################################
破的还不过瘾~~~~~~~~!!!
怎么办?
crack的宗旨就是制作出keygen
下面我们就来试一下,
首先还的分析~~通过上面的动态分析我们知道序列号的生成肯定在004D116B上面的某一段程序,
~如何确定只有跟踪,看注册码最新一次是在哪个地方出现!
所以我们再向上看的时候发现了一个循环!非常可疑,下断点跟踪!
(ollydbg会把循环标出来!)
004D10EA |. C745 F0 000000>MOV DWORD PTR SS:[EBP-10],0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~F2或者双击机器码栏设置断点-
--F9(运行)--输入用户名winroot,获取ID,ID号码4835812338,点击注册,程序被OLLYDBG拦截.
我们按F8(单步跳过)一下一下地执行,注意观察寄存器和堆栈的变化!!
004D10F1 |. C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0
004D10F8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D10FB |. E8 282CF3FF CALL UNPACKED.00403D28
004D1100 |. 8BF0 MOV ESI,EAX
004D1102 |. 85F6 TEST ESI,ESI
004D1104 |. 7E 2D JLE SHORT UNPACKED.004D1133
004D1106 |. BB 01000000 MOV EBX,1 //计数器
004D110B |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4]//取id字符串
004D110E |. 807C18 FF 00 |CMP BYTE PTR DS:[EAX+EBX-1],0
004D1113 |. 74 1A |JE SHORT UNPACKED.004D112F //是零就跳!
004D1115 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]//EAX=STR
004D1118 |. 8A4418 FF |MOV AL,BYTE PTR DS:[EAX+EBX-1]//AL=STR[EBX-1]
004D111C |. 25 FF000000 |AND EAX,0FF
004D1121 |. 33D2 |XOR EDX,EDX
004D1123 |. 0345 F0 |ADD EAX,DWORD PTR SS:[EBP-10]//和第一次的值相加
004D1126 |. 1355 F4 |ADC EDX,DWORD PTR SS:[EBP-C]
004D1129 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX//存进去
004D112C |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
004D112F |> 43 |INC EBX//计数器加1
004D1130 |. 4E |DEC ESI
004D1131 |.^75 D8 \JNZ SHORT UNPACKED.004D110B//循环取累加和
004D1133 |> 6A 00 PUSH 0
004D1135 |. 68 F1E05D00 PUSH 5DE0F1 //入栈
004D113A |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]//取序列号的累加和
004D113D |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
004D1140 |. E8 874FF3FF CALL UNPACKED.004060CC //累加和*0x5DE0F1
004D1145 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
004D1148 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
004D114B |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004D114E |. 8B87 F8020000 MOV EAX,DWORD PTR DS:[EDI+2F8]
004D1154 |. E8 B7D3FBFF CALL UNPACKED.0048E510 //变成10进制--真序列号
004D1159 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] //取假序列号的字符串
004D115C |. 50 PUSH EAX
004D115D |. FF75 F4 PUSH DWORD PTR SS:[EBP-C] ; /Arg2;返回值
004D1160 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10] ; |Arg1;序列号
004D1163 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] ; |
004D1166 |. E8 0574F3FF CALL UNPACKED.00408570 ; \UNPACKED.00408570
004D116B |. 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C]
004D116E |. 58 POP EAX
004D116F |. E8 C42CF3FF CALL UNPACKED.00403E38//比较
004D1174 |. 0F85 93000000 JNZ UNPACKED.004D120D//跳出错误
注意:所有的注释都是你跟踪以后根据寄存器和堆栈的变化得出的!也不是在一次跟踪中得出的,是跟踪了多次后得出的结论!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
结论:我们可以看出序列号是这样产生的,ID的每一位的ASCII值的累加和再和0x5DE0F1相乘得出的值转化为10进制形成序列号~~
所以
name:winroot
id:4835812338
ser=[(0x34+0x38+0x33+0x35+0x38+0x31+0x32+0x33+0x33+0x38)*0x5DE0F1] =[C0864E3D] =[3230027325]
16 16 10
简单吧~~
希望我们菜鸟群能出几个高手~~能写出来最好的教程,不像我这样~~贻误他人~
菜鸟心得:
crack是门操作性很大的学问,所以一定要动手,
看到好的文章一定要试一下自己就会有更深一步的体会,不要看到别人写过了就不去破了.
学习来不得半点虚假!
标 题:菜鸟的ollydbg1.08b教学的增补篇 (4千字)
发信人:winroot
时 间:2003-1-27 13:26:36
详细信息:
菜鸟的ollydbg1.08b教学的增补篇
+++++++++++++++++++++OllyDbg 的attach功能的使用++++++++++++++++++++++++++++++++++++
我们都知道winhex可以载内存中搜索字符,如果是明码比较,输入假的注册码
在他附近就可以找到真的注册码`~~~~~~~~~~~~~~~~~~~~~~~
当我们在使用trw和softice时我们可以不管程序的其他因素直接运行程序,输入注册名,假序列号,
然后进入trw/softice设置断点.返回windows,点注册,这时如果断点设置正确.
我们将中断在断点,然后~~~~~~~~~开始分析~~~~~~~~~~~~~
----------------------------------------------------
那么我们的OllyDbg能这样吗?开始我也以为不行,经过peterchen大哥一指点,又参考了看雪精华的文章
发现确实有这些功能!
不但有,而且非常强大!!!!!
大到我不知道该如何描述!!!!!!!(可怕吧!)
通过上面的和下面的应用概括一下:ollydbg就是适合windows各种平台使用的crack工具的合集!!!!!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
说合集有点贬低ollydbg了应该是 crack工具合集++版
首先介绍一下在文件菜单下的attach(附加)
这是OllyDbg说明书上的一段关于attach的话
你可以使用 OllyDbg 的attach在正在运行的程序.
选择FILE|attach并且在列表中选择正在运行的程序
注意:不要试图attach系统的进程,那样的话会导致系统崩溃
( 说实话,一般情况下,操作系统不会让你去attach敏感的进程)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
首先我们来演示winhex的功能:
先运行Flash转换解密,然后运行ollydbg,点击文件菜单下的attach(附加)
出现一个窗口,选择Flash转换解密的进程,选attach(附加),这个时候你要等6-8秒钟,
等他完全加载后,再右键Analyse Code(分析代码),这时再点运行,回到程序
进入注册画面,随便输入名字点获得id,输入假的注册码,按“确定”,跳出错误画面。
返回ollydbg,点暂停,然后我们进入view(查看)菜单的memory(内存),出现一个窗口,
点选这个窗口右键选择,serch for-binary string(搜索2进制字符),在ascii框内输入你刚才输入的假注册码,点ok
等吧~~一会,他将在弹出个窗口找到你的假注册码,你向下找大概在00D05D64(这是我的电脑的地址)的地方
找到真的注册码,他正和ID在一块聊天呢~:-)
呵呵~~看到了吧,他比WINHEX怎么样?~~~
#####################################################################
下面演示如何找到未脱壳程序的关键
1 开始和前面一样 先运行Flash转换解密,然后运行ollydbg,点击文件菜单下的attach(附加)
出现一个窗口,选择Flash转换解密的进程,选attach(附加),这个时候你要等6-8秒钟,
等他完全加载后,再右键Analyse Code(分析代码),这时再点运行,回到程序
进入注册画面,随便输入名字点获得id,输入假的注册码,按“确定”,跳出错误画面
2.进入olldbg,按ALT+M,在memory map窗口,选中Flash转换解密的code段,右键选中dump in cpu(在cpu中转存)
4.在cpu窗口的memory(内存)窗口,search for binary string(搜索2进制字符),在ASCII处键入“注册码错误”,search后发现了
004D1314 A3 A1 D0 BB D0 BB C4 FA !谢谢您
004D131C CA B9 D3 C3 B1 BE C8 ED 使用本软
004D1324 BC FE A3 A1 0D 0D B3 CC 件!..程
004D132C D0 F2 D0 E8 D2 AA D6 D8 序需要重
004D1334 D0 C2 C6 F4 B6 AF A3 AC 新启动,
004D133C C7 EB B5 E3 BB F7 A1 B0 请点击“
004D1344 C8 B7 B6 A8 A1 B1 B0 B4 确定”按
004D134C C5 A5 A3 A1 00 00 00 00 钮!....
004D1354 D7 A2 B2 E1 C2 EB B4 ED 注册码错
004D135C CE F3 A3 AC C7 EB D6 D8 误,请重
004D1364 D0 C2 CA E4 C8 EB 新输入
5.在选中处右击,选find refrence(搜索参考),只有一个结果,双击后,在dissamble(汇编)窗口可以见到如下代码
004D11EC |. A1 107A4D00 MOV EAX,DWORD PTR DS:[4D7A10]
004D11F1 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D11F3 |. E8 4493F7FF CALL FLASH转?0044A53C:[
004D11F8 |. A1 107A4D00 MOV EAX,DWORD PTR DS:[4D7A10]
004D11FD |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D11FF |. E8 9492F7FF CALL FLASH转?0044A498:[
004D1204 |> 8BC3 MOV EAX,EBX
004D1206 |. E8 D51BF3FF CALL FLASH转?00402DE0
004D120B |. EB 34 JMP SHORT FLASH转?004D1241
004D120D |> 6A 00 PUSH 0 //还记得这个死亡路口吗?
004D120F |. B9 74124D00 MOV ECX,FLASH转?004D1274
004D1214 |. BA 54134D00 MOV EDX,FLASH转?004D1354c
小结:
1,首先这个软件加壳了,我们不去管他,而直接找到它的参考,继而轻松的找到关键,
是别的软件很难达到的!
2技巧总是在实践中产生.熟练的使用ollydbg能起到事半功倍的效果
我(菜鸟)写这篇短文是想起到抛砖引玉的效果~
相关视频
相关阅读 Mac访问Windows共享文件夹Windows 7正版系统验证方法windows 8.1系统版本号查看方法Windows 8.1系统电话激活时无法输入微软返回代码解决方法Windows 8如何调整屏幕分辨率windows8.1磁盘占用100%解决方法Mac双系统如何删除Boot Camp安装的Windows分区Apple教你如何在Mac 上运行 Windows
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>