发布时间:2023-09-19 来源:win7旗舰版 浏览量:
网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。 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是门操作性很大的学问,所以一定要动手, 看到好的文章一定要试一下自己就会有更深一步的体会,不要看到别人写过了就不去破了. 学习来不得半点虚假! OllyDbg实用技巧六则 1、让跳转路径显示出来 打开Options\Debugging Option。弹出Debugging Option对话框,选择CPU页,选定 “Show direction to jumps”、“Show jump path”和“Show grayed path if jump is not taken”。如此以来在Disassembler窗口就会显示跳转的路径了。 2、让OD显示MFC42.DLL中的函数 如果程序是用MFC进行的动态编译,那么在OD中将只能显示MFC42.DLL中的函数为: 00410E40 |. E8 43000000 CALL <JMP.&MFC42.#1576> 1576是函数在MFC42.DLL中的序号。打开Debug\Select import libraries,单击弹出的对话 框中“Add”,在弹出的打开文件对话框中选择“MFC42.LIB”并打开,重新载入MFC程序, 你就可以看见函数名称变为: 00410E40 |. E8 43000000 CALL <JMP.&MFC42.#1576_?AfxWinMain@@Y> IDA中分析出了来的东西一样了!呵呵,以后不用等待IDA的“细嚼慢咽”也可以轻松搞定 MFC程序了。其他的DLL类似,如果有序号,可以在VC的LIB目录中找到相关的.LIB文件,加 到OD中便可。如果你没有“MFC42.DLL”,你可以的到新论坛的下载区找,我已经上传到那 里了。 3、让OD轻松躲过“ANTI-DEBUG” 很多“ANTI-DEBUG”的程序都是在程序开始时来检查是否安装调试器的。用这种特性我 们可以轻松的用OD的“Attach”绕过检查部分。如“X语言”,如果你哟内TRW2K/S-ICE/OD 直接加载它的话,程序回警告你安装了调试器并结束。但是我们在“X语言”开启后再运行 OD,并用“Attach”系上它就就可以了,轻松通过检查。而且在OD系上它后仍然可以用 CTRL+A进行分析。如此一来,快哉!:) 4、轻松对付调用“MessageBoxA”以及类似的模态对话框的程序 很多人都认为OD不好拦截“MessageBoxA”这类API函数。其实我们有个很简单的办法将 API拦截下来,并且快速找到比较地点/主算法地点。首先用OD加载目标程序,如果不能加载, 用上面的方法“Attach”目标程序。然后,F9运行目标程序,并且有意让目标程序显示“ MessageBox”,然后切换到OD中,F12暂停,如 0041201F |> 53 PUSH EBX /Style 00412020 |. 57 PUSH EDI |Title 00412021 |. FF75 08 PUSH [ARG.1] |Text 00412024 |. FF75 F4 PUSH [LOCAL.3] |hOwner 00412027 |. FF15 A8534100 CALL DWORD PTR DS:[4153A8] \MessageBoxA 0041202D |. 85F6 TEST ESI, ESI 停在此处 0041202F |. 8BF8 MOV EDI, EAX 00412031 |. 74 05 JE SHORT 1551-CRA.00412038 F8单步一下,切换到“MessageBox”中,确认,被OD中断。我们可以看见上面的代码41201F 处有一个“〉”,说明可以从某段代码跳转到此处,我们选择41201F这一行,在 “Information”栏看见一句“JUMP FROM 412003”,右键单击,选择“GO TO JUMP FROM 412003”。回到412003,一般都是条件跳转,上面的内容就是比较的地方啦。:) 5、使用OD的TRACK功能 OD拥有强大的TRACK功能,在分析算法时十分有用。首先我们要设定OD的TRACK缓冲区大 小,选择Option\Debugging Option,在弹出的对话框中选择TRACK页, “Size of run track buffer(byte/record)”,缓冲区大小,当然约大约好。其他的设置 在我以前的OLLYDBG.INI中都已经设置好了。然后,开启目标程序,在DEBUG中选择“Open or clear run track”。然后我们就可以用CTRL+F11或CTRL+F12开启“Track into”和“ Track over”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制 TRACK功能了。 “Track into”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的 CALL中。 “Track over”和“Track into”类似,但是不进入CALL “+”用来显示TRACK缓冲区中的下一条指令 “-”用来显示TRACK缓冲区中的上一条指令 “*”用来发返回当前指令 6、不是技巧的技巧 当你遇到花指令的时候一定会很头痛。但是如果你用OD进行分析的时候就会轻松得多。 OD会自动标识出无效指令,即花指令。如果OD没有正确识别,你还可以用CTRL+↑/↓来单个 字节的移动。可以很有效的识别出花指令的所在。 网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。 |
ollydbg是个功能强大的软件,以前我也不用他(不习惯),而且很多经典教程都是用trw和soft