破解常用断点大全
光缆找断点的技巧和方法
光缆找断点的技巧和方法
以下是 8 条关于光缆找断点的技巧和方法:
1. 嘿,你知道吗,敲一敲光缆说不定就能找到断点呢!就像我们小时候找东西,敲敲打打说不定就有发现啦。
比如说你可以拿个小木棍,轻轻敲击光缆沿线,仔细听声音变化,声音突然不一样的地方也许就是断点哦!
2. 哎呀,观察光缆的外观也很重要呀!如果哪里有明显的破损、弯折或者异常的地方,那很可能就是断点所在呀。
就好像一个人脸上有个大伤疤,一眼就能看到嘛,这里可要瞪大眼睛啦!
3. 还有哇,用手摸摸光缆呀!感觉一下有没有不顺畅的地方,要是突然有点疙疙瘩瘩的,嘿嘿,断点可能就在那里哟。
这就像走路的时候突然感觉脚下有个石头一样明显呀!
4. 嘿,用专门的仪器检测可牛了呢!那精准度,就像瞄准镜一样厉害呀。
把仪器接上光缆,它就能告诉你断点在哪里啦,这不是轻而易举嘛!比如有些专业的光缆断点检测仪,一用就知道有没有断点啦。
5. 可别小看了温度变化哟!如果光缆某个地方温度异常,说不定断点就在那呢。
这就好像发烧的人会感觉不舒服一样明显呢。
拿个温度计测测看呀!
6. 记得多换几个角度去思考寻找呀!别死脑筋只盯着一个地方找,就像找钥匙不能只在一个地方翻呀。
要全方位地去看,说不定断点就在你没想到的地方等着你发现呢!
7. 使用光时域反射仪也是个好办法呀!它能像个侦探一样帮你快速找到断点哦。
这个仪器一出手,就像破案高手找到关键线索一样厉害呢。
8. 最后呀,要有耐心!找光缆断点可不是一下子就能找到的哟,别着急别烦躁。
就像挖宝藏一样,慢慢来总会挖到的呀。
我的观点结论就是:这些技巧和方法都很实用,大家可以多试试,肯定能找到光缆断点!。
c语言断点指令 -回复
c语言断点指令-回复C语言断点指令C语言是一种流行的编程语言,经常用于开发各种应用程序和系统。
在进行C语言编程时,调试是非常重要的一环。
调试通过检查代码的执行过程,识别错误和问题,从而解决它们。
在调试过程中,断点是一项非常有用的功能。
断点是指程序执行过程中的一种暂停点。
当遇到断点,程序将停止在该处执行,为开发者提供机会来检查变量、检查代码逻辑或跟踪程序流程。
C语言提供了几个有用的断点指令来帮助开发者进行调试。
一个常见的断点指令是`break`。
`break`指令告诉编译器在指定的位置停止程序的执行。
它的语法如下:break;在断点之前,您可以设置一个条件,以限制何时触发断点。
要设置条件,可以这样编写`break`指令:break if (condition);其中,`condition`是一个表达式,如果条件为真,则断点会触发。
例如,如果我们想要在`i`的值为5时停止程序的执行,可以这样设置断点:break if (i == 5);另一个有用的断点指令是`watch`。
`watch`指令用于监视特定变量的值,并在该值发生变化时触发断点。
它的语法如下:watch variable;其中,`variable`是要监视的变量的名称。
例如,如果我们想要监视变量`num`的值,在它发生变化时触发断点,可以这样使用`watch`指令:watch num;除了以上两个基本的断点指令,C语言还提供了其他一些有用的断点指令来增强调试体验。
下面是其中一些常用的断点指令:1. `disable breakpoint`:禁用一个断点,使其不再触发。
2. `enable breakpoint`:启用已禁用的断点,使其再次触发。
3. `delete breakpoint`:删除一个断点,使其不再存在。
4. `info breakpoints`:显示当前设置的所有断点的信息。
5. `run`:从当前位置开始运行程序,直到遇到下一个断点。
ollydbg破解教学之万能断点篇
ollydbg破解教学之万能断点篇有的只是OD不能下万能断点的断⾔,⼀时⼼恢之极,可是我原来⽤TRW和SICE⽤的挺好,谁知系统⼜跟我闹⽭盾,⼀⽤TRW和SICE就死机,没办法我现在只能⽤OD,我写的⼀些破解⽂章都是⽤OD破的,反复试验,我终于发现OD也能下万能断点,在我以前写的⼀些⽂章中好象有⼀篇简单提到过,但没有说的很详细,这次静下⼼,想写⼀点东西,送给我⼼爱的组织DFCG吧,我的破解是从DFCG组织起步的,很感谢DFCG的⾼⼿们的帮助,在此说声谢谢!为了更明确,这次破解所使⽤的调试器OD是从看雪论坛临时下载的OD1.09的汉化版,没有使⽤我⾃⼰⼿头经过改造的OD,在此也感谢看雪论坛,这⾥真的有很多⾼⼿,在这个论坛我也学到了很多.这次破解的对象是超级XX王,为保护国产软件我隐去了软件相关信息,我不想给⾃⼰带来⿇烦,现在⼯作很忙,能少⼀点⿇烦就尽量少⼀点吧.破解作者yzez[DFCG]破解⼯具ollydbg汉化版,下载https:///softs/58565.html破解⽬的本不为破解⽽破解,只因为技术⽽破解破解环境WINDOWS XP,这个我已经在98和XP下各做了两次,贴图和我这篇⽂章是在XP系统下完成的.破解过程1.检查了⼀下,该程序⽆壳,C++编译,⽤W32DSM反汇编⼀堆乱码,我倒!那就动态调试吧!⽤ollydbg1.09载⼊程序,这次我将教你们如何⽤OD下万能断点,过程我尽可能详细⼀点,下⾯请看.载⼊程序选OD菜单栏上的插件-----命令⾏(快捷键是ALT+F1),在弹出的窗⼝中输⼊万能断点命令:bpx hmemcpy,按ENTER键,结果⼜出现⼀个对话框:Intermodular calls00401164 CALL DWORD PTR DS:[<&USER32.GetWindowRect>] USER32.GetWindowRect0040118F CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect00401279 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect004013E1 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect0040190A CALL DWORD PTR DS:[<&KERNEL32.GetThreadLocale>] kernel32.GetThreadLocale0040191C CALL DWORD PTR DS:[<&KERNEL32.GetLocaleInfoA>] kernel32.GetLocaleInfoA还有很多,我就省略了,在这个框⾥右键单击,出现⼀个对话框,选中在每个命令中设置断点(热键是S),单击,你看每⼀⾏都变成了红⾊吧,这表⽰全部设下断点了,后⾯的过程很烦燥,你要⼀边按F9,边按F2把⼀些⽆⽤的断点去掉,有⼀点耐⼼吧,当然也可以不这样做,但遇到断点跳不过的时候,你就得按F2把这个断点去掉.感觉在这⼀点上OD⽐不上TRW和SICE,到出现注册信息框后,你要输⼊注册信息,然后按确定,程序被断下来,我的序列号是:GK342QZ0C6RE03L,我输⼊试验码:123456789098765.程序中断在下⾯:00471F71 CALL DWORD PTR DS:[<&USER32.GetWindowTex>****按确定后回到OD程序中断在此,按F8⾛,在此还没有到关键处!*****************************************************注意这⾥会循环两次,分别处理序列号和试验码,按F8⾛00471F77 LEA ECX,DWORD PTR DS:[EAX+1]00471F7A PUSH ECX00471F7B MOV ECX,DWORD PTR SS:[EBP+10]00471F7E PUSH EAX00471F7F CALL SuperPIM.0043E15D00471F84 PUSH EAX00471F85 PUSH ESI00471F86 CALL DWORD PTR DS:[<&USER32.GetWindowTex>00471F8C MOV ECX,DWORD PTR SS:[EBP+10]00471F8F PUSH -100471F91 CALL SuperPIM.00401D6A00471F96 JMP SHORT SuperPIM.00471FA300471F98 MOV EAX,DWORD PTR SS:[EBP+10]00471F9B PUSH DWORD PTR DS:[EAX]00471F9D PUSH ESI00471F9E CALL SuperPIM.00470B6100471FA4 POP ESI00471FA5 POP EBP00471FA6 RETN 0C*************************************程序第⼆次循环后最后会返回到0040FE99下⾯看代码:----------------------------------------------------------------------------------------------------------0040FE99 LEA EAX,DWORD PTR SS:[EBP-14]****第⼆次循环后会返回到这⾥,注意这就是我们要找的关键地⽅,按F8往下!0040FE9C PUSH EAX0040FE9D CALL SuperPIM.00433D92***********这就是关键CALL,按F7追进,⼀定要进,因为算法就在这⾥⾯!0040FEA2 POP ECX0040FEA3 AND DWORD PTR SS:[EBP-4],00040FEA7 LEA ESI,DWORD PTR DS:[EDI+74]0040FEAA MOV EAX,DWORD PTR DS:[ESI]******试验码⼊EAX0040FEAC CMP DWORD PTR DS:[EAX-C],0******⽐较试验码输⼊了吗?0040FEB0 JE SHORT SuperPIM.0040FF2F******没有输⼊就跳⾛,⼀跳就失败!0040FEB2 PUSH 280040FEB4 LEA EAX,DWORD PTR SS:[EBP-18]0040FEB7 PUSH ESI0040FEB8 PUSH EAX0040FEB9 CALL SuperPIM.0042CEC8**********此CALL对输⼊的注册码进⾏处理,得到⼀个40位的长字符串,有兴趣⾃⼰跟,******************************************我已是头晕的很,不想跟进!0040FEBE LEA ECX,DWORD PTR SS:[EBP-14]0040FEC1 PUSH ECX0040FEC2 PUSH EAX0040FEC3 CALL SuperPIM.0040F9B7**********此CALL对序列号处理,也是得到⼀个40位的长字符串0040FEC8 MOV ECX,DWORD PTR SS:[EBP-18]0040FECB ADD ESP,140040FECE ADD ECX,-100040FED1 MOV BYTE PTR SS:[EBP-D],AL0040FED4 CALL SuperPIM.00401B5D**********此CALL进⾏⽐较,注册码不对,值为00040FED9 CMP BYTE PTR SS:[EBP-D],0*******⽐较是0吗?0040FEDD JE SHORT SuperPIM.0040FF2F******相等就跳,跳就失败,所以⼀定不能跳!0040FEDF PUSH 0**************************不跳往下你就成功了!下⾯代码省略! ...............................................................省略若⼲代码!.........................============================================================================================================= ************************************关键CALL的代码!*******************************************************00433D92 MOV EAX, SuperPIM.0049844E****追进关键CALL后我们来到这⾥!00433D97 CALL SuperPIM.0045090000433D9C PUSH ECX00433D9D PUSH ECX00433D9E AND [LOCAL.5], 000433DA2 LEA EAX, [LOCAL.5]00433DA5 PUSH EAX00433DA6 CALL SuperPIM.00433CA9********此CALL根据电脑硬件信息得到你的序列号,有兴趣跟吧!我是没有兴趣!00433DAB AND [LOCAL.1], 000433DAF PUSH 1400433DB1 LEA EAX, [LOCAL.5]00433DB4 PUSH EAX00433DB5 LEA EAX, [LOCAL.4]00433DB8 PUSH EAX00433DB9 CALL SuperPIM.0042CEC8*******算法CALL(1),按F7跟进!00433DBE PUSH 2800433DC0 LEA EAX, [LOCAL.4]00433DC3 PUSH EAX00433DC4 PUSH [ARG.1]00433DC7 MOV BYTE PTR SS:[EBP-4], 100433DCB CALL SuperPIM.0042CEC800433DD0 MOV ECX, [LOCAL.4]00433DD3 ADD ESP, 1C00433DD6 ADD ECX, -10*****************************省略N⾏代码!********************************************************0043454B RETN=========================================================================================================== ***********************************算法CALL!*********************************************************0042CEC8 MOV EAX, SuperPIM.00497B52********追进算法CALL我们在这⾥!0042CECD CALL SuperPIM.004509000042CED2 SUB ESP, 140042CED5 PUSH EBX0042CED6 PUSH ESI0042CED7 XOR EBX, EBX0042CED9 PUSH EDI0042CEDA MOV [LOCAL.8], EBX0042CEDD CALL SuperPIM.004639B50042CEE2 MOV EDX, DWORD PTR DS:[EAX]0042CEE4 MOV ECX, EAX0042CEE6 CALL DWORD PTR DS:[EDX+C]0042CEE9 LEA EDI, DWORD PTR DS:[EAX+10]0042CEEC MOV [LOCAL.4], EDI0042CEEF MOV EAX, [ARG.2]0042CEF2 MOV EAX, DWORD PTR DS:[EAX]*******序列号:GK342QZ0C6RE03L移⼊EAX0042CEF4 MOV ESI, DWORD PTR DS:[EAX-C]*****序列号的位数15(⼗六进制值是F)送⼊ESI0042CEF7 CMP ESI, EBX**********************⽐较ESI和EBX,ESI的值是F即序列号位数,EBX的初始值是00042CEF9 MOV [LOCAL.1], EBX0042CEFC MOV [LOCAL.8], ESI0042CEFF JE SuperPIM.0042CFB2*************相等就跳,这⾥当然不相等,所以就不会跳!0042CF05 MOV EAX, [ARG.3]******************常数14(⼗进制值是20)送⼊EAX0042CF08 CMP EAX, ESI**********************⽐较EAX和ESI,即14和F⽐较!0042CF0A MOV [LOCAL.6], EAX0042CF0D JG SHORT SuperPIM.0042CF12*******⼤于就跳!0042CF0F MOV [LOCAL.6], ESI0042CF12 CMP [LOCAL.6], EBX****************跳到这⾥!⽐较14和00042CF15 JLE SuperPIM.0042CFB2*************⼩于就跳,这⾥当然不会⼩!所以不跳!0042CF1B MOV EAX, EBX**********************0移⼊EAX0042CF1D CDQ***********************************EDX清0,准备计算!0042CF1E IDIV ESI***************************除,EAX/ESI ,EAX的值是0,ESI的值存放序列号的位数F0042CF20 MOV EAX, [ARG.2]******************赋EAX地址值0042CF23 MOV EAX, DWORD PTR DS:[EAX]*******序列号:GK342QZ0C6RE03L移⼊EAX0042CF25 PUSH EBX***************************EBX⼊栈0042CF26 MOV AL, BYTE PTR DS:[EDX+EAX]*****序列号的第⼀位G(ASCII码值47)⼊AL0042CF29 MOV BYTE PTR SS:[EBP-1C], AL******保存值470042CF2C PUSH [LOCAL.7]0042CF2F CALL SuperPIM.0042CD8E*************算法CALL(2),按F7跟进!代码直接在下⾯给出============================================================================================================== ***************************算法CALL(2)*****************************************************0042CD8E PUSH EBP0042CD8F MOV EBP, ESP0042CD91 PUSH ECX*************************G的ASCII码值47⼊ECX0042CD92 MOVZX EAX, BYTE PTR SS:[EBP+8]****扩展成000000470042CD96 MOV ECX, [ARG.2]****************赋ECX的初始值为00042CD99 MOV [LOCAL.1], EAX0042CD9C MOV EAX, ECX********************ECX的值移⼊EAX0042CD9E IMUL EAX, ECX********************EAX=EAX*ECX=0*00042CDA1 LEA EAX, DWORD PTR DS:[EAX+EAX*2+7]**EAX+EAX*2+7的值7给EAX0042CDA5 IMUL EAX, ECX********************EAX=EAX*ECX=7*00042CDA8 ADD EAX, 0D*********************EAX=EAX+0D=D0042CDAB IMUL EAX, ECX********************EAX=EAX*ECX=D*0=00042CDAE PUSH ESI*************************序列号位数F⼊栈!0042CDAF LEA ESI, DWORD PTR DS:[ECX+5]0042CDB2 PUSH ESI0042CDB3 MOV [ARG.1], EAX0042CDB6 LEA EAX, [ARG.1]0042CDB9 PUSH 40042CDBB PUSH EAX0042CDBC CALL SuperPIM.0042CD2E***********这个CALL也在计算,我实在不想跟进!0042CDC1 PUSH ESI0042CDC2 LEA EAX, [LOCAL.1]0042CDC5 PUSH 40042CDC7 PUSH EAX0042CDC8 CALL SuperPIM.0042CD5E**********这个CALL也是计算CALL,烦!不跟了!0042CDCD MOV EAX, [ARG.1]0042CDD0 ADD ESP, 180042CDD3 XOR EAX, [LOCAL.1]*************这⾥赋EAX的值380000020042CDD6 POP ESI0042CDD7 LEAVE0042CDD8 RETN=========================================================================算法CALL(2)结束================== 0042CF34 POP ECX0042CF35 POP ECX0042CF36 PUSH 2B***************************常数2B⼊栈!0042CF38 XOR EDX, EDX0042CF3A POP ECX**************************把常数2B赋给ECX0042CF3B DIV ECX**************************除,EAX/ECX=38000002/2B=014D6535,余数1B⼊EDX0042CF3D MOV ECX, EDX*********************结果1B⼊ECX0042CF3F ADD CL, 30***********************CL=CL+30=1B+30=4B(对应的字符串是K)0042CF42 CMP CL, 39***********************⽐较是不是数字90042CF45 MOV BYTE PTR SS:[EBP-14], CL*****保存字符串K0042CF48 JLE SHORT SuperPIM.0042CF55******⼩于就跳⾛!0042CF4A CMP CL, 41***********************⽐较是不是A0042CF4D JGE SHORT SuperPIM.0042CF55******⼤于就跳⾛0042CF4F ADD CL, 0F60042CF52 MOV BYTE PTR SS:[EBP-14], CL0042CF55 CMP EBX, [ARG.3]*****************跳到这⾥!⽐较0和140042CF58 JGE SHORT SuperPIM.0042CF67******⼤于等于就跳⾛!0042CF5A PUSH [LOCAL.5]0042CF5D LEA ECX, [LOCAL.4]0042CF60 CALL SuperPIM.00417EAF0042CF65 JMP SHORT SuperPIM.0042CFA5******⽆条件跳0042CF67 MOV EAX, EBX0042CF69 CDQ0042CF6A IDIV [ARG.3]0042CF6D MOVSX ECX, CL0042CF70 PUSH 2B0042CF72 MOV ESI, EDX0042CF74 MOVSX EAX, BYTE PTR DS:[ESI+EDI]0042CF78 LEA EAX, DWORD PTR DS:[EAX+ECX-60]0042CF7C CDQ0042CF7D POP ECX0042CF7E IDIV ECX0042CF80 ADD DL, 300042CF83 CMP DL, 390042CF86 MOV BYTE PTR SS:[EBP-14], DL0042CF89 JLE SHORT SuperPIM.0042CF960042CF8B CMP DL, 410042CF8E JGE SHORT SuperPIM.0042CF960042CF90 ADD DL, 0F60042CF93 MOV BYTE PTR SS:[EBP-14], DL0042CF96 PUSH [LOCAL.5]0042CF99 LEA ECX, [LOCAL.4]0042CF9C PUSH ESI0042CF9D CALL SuperPIM.0042CE4B0042CFA2 MOV ESI, [LOCAL.8]0042CFA5 MOV EDI, [LOCAL.4]***************上⾯跳到这⾥!0042CFA8 INC EBX*************************EBX加10042CFA9 CMP EBX, [LOCAL.6]**************⽐较1和140042CFAC JL SuperPIM.0042CF1B***********⼩于就跳,循环,序列号只有15位,这⾥循环20次,取完后⼜从第⼀位取出! ************************************循环结束后得到的值是:K3L2LPBDW1F2H4B8S0UY这就是我们要的注册码!0042CFB2 MOV ECX, [ARG.1]0042CFB5 LEA EAX, [LOCAL.4]0042CFB8 PUSH EAX0042CFB9 CALL SuperPIM.00401F360042CFBE LEA ECX, DWORD PTR DS:[EDI-10]0042CFC1 CALL SuperPIM.00401B5D0042CFC6 MOV ECX, [LOCAL.3]0042CFC9 MOV EAX, [ARG.1]0042CFCC POP EDI0042CFCD POP ESI0042CFCE POP EBX0042CFCF MOV DWORD PTR FS:[0], ECX0042CFD6 LEAVE0042CFD7 RETN写这篇⽂章的⽬的是想说明如何在OD下万能断点,算法过程太烦琐,就不想多跟了!希望能对⼤家有点启发,如果觉得这篇破⽂还⾏帮我顶⼀下吧!也是希望有更多的⼈能看到,对更多的⼈有益,我也是⼀只菜鸟,请⼤家多多指点!。
调试技巧(断点调试的各种技巧,让你调试程序更得心应手)
调试技巧(断点调试的各种技巧,让你调试程序更得⼼应⼿)断点的源由:INT 是Intel系列CPU的⼀个指令,可以让程序产⽣⼀个中断或者异常。
程序中如果有中断或者异常发⽣了以后,CPU会中断程序的执⾏,去⼀个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler)。
IDT是操作系统在启动的时候初始化的,⾄于IDT的细节问题,例如什么是IDT,怎样编写⼀个IDT的例程,怎样初始化IDT,可以去⽹上搜索⼀些资料。
总之,这⾥我们只要知道,CPU在执⾏程序指令过程中,碰到INT 3中断程序的执⾏,CPU然后去IDT表⾥⾯找到处理断点的例程⼊⼝。
这个例程要做的事情就是:1. 先看看机器⾥⾯是不是安装了⼀个调试器—记住,这⼀步很重要,之所以重要以后的⽂章⾥⾯会介绍。
2. 如果机器⾥⾯没有安装调试器,那么操作系统就会终⽌程序的执⾏。
3. 否则操作系统启动调试器,并将调试器附到进程上。
4. 这样,我们才能在调试器⾥⾯检查程序内部变量的值。
INT 3 (或者DebugBreak(),或者Debugger.Break())指令是我们⾃⼰在代码⾥⾯硬编码进去的,因此我们在Visual Studio⾥,在相应的代码⾏⾥⾯点⼀下,出现⼀个⼩红球,也就是说Visual Studio在程序指令集某个地⽅动态地添加了⼀个INT 3指令。
现在的问题来了,Visual Studio是如何在程序中正确找到插⼊INT 3指令的位置的?或者更具体⼀些,我们在源代码(⽂本⽂件)⾥⾯设置断点的,Visual Studio需要把代码⾏翻译成在程序指令集中的位置。
Visual Studio之所以需要做翻译,是因为通常⼀⾏C++或者 C#代码都会对应好⼏⾏汇编指令。
因此,Visual Studio需要⼀个额外的⽂件来执⾏这个翻译过程,这个额外的⽂件叫做调试符号⽂件(Symbols),是由编译器⽣成的。
Visual Studio系列的编译器,不论是C#、还是C++编译器都会⽣成这个调试符号⽂件,.pdb ⽂件。
vc中常见断点的解决方法
CDataExchange::PrepareCtrl()
DLGDATA.CPP文件的第43行
通常的原因是释放了一个同数据交换变量关联的控件
ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP)
ASSERT(value == -1)
一旦IsKindof()被一个无效的由CWnd派生的对象调用,就会产生这个断言。它说明对象没有初始化过(比如NULL指针),或是内存先前出了故障。
ASSERT(!pDX->m_bSaveAndValidate)
AFXAPI DDX_Control()
DLGDATA.CPP文件的第624行
调用UpdateData()或是UpdateData(TRUE)之前至少要调用一次UpdateData(FALSE),否则就会出现这个断言
在Open方法中充满了断言
CStdioFile::Open()
FILETXT.CPP文件
这些断言捕获没有文件名,或者文件名没有以NULL结尾等情况
ASSERT(m_hMenu == NULL)
CMenu::Attach()
WINMENU.CPP文件的98行
这个断言失败的原因是由于调用了两次LoadMenu(),而中间没有调用DestroyMenu()
ASSERT((dwStyle& WS_POPUP) == 0)
CWnd::Create()
WINCORE.CPP文件中的第747行
起因是由于使用Create()函数时试图赋予WS_POPUP风格没,但是不支持的,想要这种风格应该用CreateEx()函数
ASSERT(pMap != NULL)
破解知识大盘点
[黑客X档案]从零开始学破解之五——破解知识大盘点+“断点”探秘(1)经过了前面四堂课的学习,小菜鸟们是不是感觉对破解越来越有兴趣了呢?随着不断的学习大家的水平也在一点点的提高。
可是在这里要提醒大家的是学习破解千万不能像猴子搬苞谷一样,学习了新的知识就忘了以前学过的知识。
为了让大家给以后的学习打下更好的基础。
我决定在这一课开始之前为大家做一个简单的学习总结。
大家回忆一下以前学过的知识。
一.学习破解必备工具工欲善其事,必先利其器。
而且不论我们的破解旅程能走多远,这些工具将会一直帮助我们走向成功。
1. 探测工具PEID作用:揭开软件的外衣因为大部分的破解都是在软件没有加壳的状态下进行的,因此在破解之前,判断软件是否加壳,加了什么壳非常重要。
(当然,目前为止,我们一直没有提过加壳与脱壳的知识,一直是在理想的“无壳”环境中学习,在不久的将来,X档案还会为大家推出零基础学脱壳的套餐,教会大家更使用的技术)这个工具的使用也非常简单,双击打开后,把待检测的软件拖到PEID的节面上,就会自动显示判断的结果了。
如图1.图12. 反汇编工具作用:解剖软件代表作:静态反汇编工具W32DASM,动态反汇编工具OllyDbg(简称OD).OllyDbg是当今最为流行的调试解密工具。
它的原版界面是英文的,有人汉化成中文并加入了非常多非常实用的插件之后,为了区别原版,起了个名字叫OllyICE。
尽管平时大家用得更多的可能是汉化后的OllyICE,可是习惯上还是叫做OD。
要完全掌握OD可能比较困难,大家只需要学会双击OllyICE后,把你要破解的文件拖到软件的界面中就能够自动加载到OD里就好了。
剩下的操作在从零开始学破解系列的文章里都会详细教你。
以上是我们接触到的最常见也是必备的两类软件,至于脱壳工具,资源编辑等工具,由于还没机会真正的体验到它们的功能,所以就先不多说了。
二.菜鸟必须了解的破解方法常用的破解方法有暴力破解和完美破解暴力破解(简称爆破)就是反汇编查处软件的一些限制关键代码所在,强行修改某些代码改变程序的运行流程,从而达到突破限制的破解目的。
破解软件所用的十大工具
破解软件所用的十大工具Cracker破解软件所用的十大工具正版软件生存的因素很多,被非法盗版和破解可以说是头号大敌。
那么影响造成软件生存困难的Cracker们到底用了那些武器呢,今天就让我让带您去看看神秘的Cracker常用的十类软件,它们就是正版软件的十大杀手~一. 调试类工具Soft-ICE和Trw2000。
Soft-ICE是目前公认最好的跟踪调试工具。
使用Soft-ICE可以很容易的跟踪一个软件、或是监视软件产生的错误进行除错,它有DOS、WINDOW3.1、WIN95/98/NT/2000/各个平台上的版本。
这个本是用来对软件进行调试、跟踪、除错的工具,在Cracker手中变成了最恐怖的破解工具;Trw2000是中国人自己编写的调试软件,完全兼容Soft-ICE各条指令,由于现在许多软件能检测Soft-ICE存在,而对TRW2000的检测就差了许多,因此目前它成了很多Cracker的最爱。
TRW2000专门针对软件破解进行了优化,在Windows下跟踪调试程序,跟踪功能更强;可以设置各种断点,并且断点种类更多;它可以象一些脱壳工具一样完成对加密外壳的去除,自动生成EXE文件,因此它的破解能力更强,在破解者手中对共享软件的发展威胁更大。
它还有在DOS下的版本,名为TR。
二. 反汇编工具Wdasm8.93黄金版和Hiew。
Cracker常将Soft-ICE和Trw2000比作屠龙刀,将Wdasm8.93则比作倚天剑。
Wdasm8.93可方便地反汇编程序,它能静态分析程序流程,也可动态分析程序。
在原有的普通版的基础上,一些破解者又开发出了Wdasm8.93黄金版,加强了对中文字符串的提取。
对国产共享软件的威胁也就更大了。
例如开心斗地主这个很好玩的共享软件,用黄金版对其反汇编可以直接看到注册码,普通版不能,您说它厉害不,Hiew是一个十六进制工具,它除了普通十六进制的功能外,它还有个特色,能反汇编文件,并可以用汇编指令修改程序,用它修改程序,方便快捷~这也是Cracker们常用的静态反汇编工具。
常用断点
LAHF 标志寄存器传送,把标志装入AH.
SAHF 标志寄存器传送,把AH内容装入标志寄存器.
PUSHF 标志入栈.
POPF 标志出栈.
PUSHD 32位标志入栈.
拦截驱动器:
bp GetDriveTypeA 获取磁盘驱动器类型
bp GetLogicalDrives 获取逻辑驱动器符号
bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径
★★VB程序专用断点★★
bp __vbaStrCmp 比较字符串是否相等
1. 通用数据传送指令.
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字压入堆栈.
POP 把字弹出堆栈.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
6
mov eax [ ]
mov edx [ ]
call 00??????
test eax eax
setz (setnz) bl,cl…
7
call 00?????? ***
push eax (ebx,ecx…)
POPD 32位标志出栈.
二、算术运算指令
───────────────────────────────────────
ADD 加法.
ADC 带进位加法.
INC 加 1.
AAA 加法的ASCII码调整.
DAA 加法的十进制调整.
SUB 减法.
SBB 带借位减法.
DEC 减 1.
od常用下断api
OD 常用下断API(2009-10-10 11:33:17)标签:od api 断点 it 分类:破解之道1.GetModuleHandleA获取一个应用程序或动态链接库的模块句柄常用于找Magic Jump,破解加密的IAT2.GetCurrentThreadId获取当前线程一个唯一的线程标识符常用于寻找OEP3. CreateFile这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台常用于程序自校验4.SetWindowText设置窗口的标题文字或控件的内容(在vb里使用:针对vb窗体,应使用caption或text属性)5.VirtualAlloc VirtualFree内存的分配与释放6.bp OpenMutexA双进程转单进程7.LoadLibraryA (用于找Magic Jump)8.he OutputDebugStringA断下后,选中%s%之类的字符,点右键->二进制->使用00填充 常用于 避开Anti ,OD的字符串泄漏漏洞字符串bp GetDlgItemTextA(W) ****bp GetDlgItemIntbp GetWindowTextA(W) ****bp GetWindowWordbmsg XXXX wm_gettext对话框bp MessageBeepbp MessageBoxA(W) ****bp MessageBoxExA(W)bp DialogBoxParamA(W)bp GreateWindowExA(W)bp ShowWindowbp UpdateWindowbmsg XXXX wm_command对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox注册表相关bp RegCreateKeyA(W)bp RegDeleteKeyA(W)bp RegQueryValueA(W)bp RegCloseKeybp RegOpenKeyA(W) ****bp RegOpenKeyExA **** 一种不行用另一种时间相关bp GetLocalTimebp GetFileTimebp GetSystemtimeCD-ROM或磁盘相关bp GetFileAttributesA(W) bp GetFileSizebp GetDriveTypebp GetLastErrorbp ReadFilebpio -h (CD-ROM端口地址) R软件狗bpio -h 278Rbpio -h 378RINI初始化文件相关bp GetPrivateProfileStringA **** bp GetPrivateProfileIntbp WritePrivateProfileStringbp WritePrivateProfileInt文件访问相关bp ReadFilebp WriteFilebp CreateFileA ****bp SetFilePointerbp GetSystemDirectory参考自:标 题: 笑解 API 函数 -- API 绝密档案系列之一作 者: gzgzlxg时 间: 2006-03-01 07:14链 接: /showthread.php?threadid=21959详细信息:1. HMODULE GetModuleHandle(LPCTSTR lpModuleName // address of module name to return handle// for);GetModuleHandle 实际上分为两个函数GetModuleHandleA--处理 Ansi 字符串GetModuleHandleW--处理 Unicode 字符串其实真正干活的函数是,GetModuleHandleW (指NT以后的系统),GetModuleHandleA 只不过将用户输入的 Ansi 字符串转成 Unicode 字符串然后就直接调用 GetModuleHandleW,所以在 OD 中如果下断拦截这个函数,直接拦截 GetModuleHandleW 就可以了,保险一个都跑不掉。
gdb 列举断点 -回复
gdb 列举断点-回复GDB(GNU调试器)是一个功能强大的开源调试工具,可用于调试C、C ++等编程语言。
其中,设置和管理断点是GDB中重要的功能之一。
断点是用于在程序执行期间中断程序的特殊指令。
通过在关键点上设置断点,开发人员可以检查程序状态,跟踪变量和执行路径,并诊断潜在问题。
在本文中,我们将介绍如何使用GDB设置和管理断点。
第一步:理解断点的类型在使用GDB设置断点之前,让我们首先了解常见的断点类型。
GDB支持多种类型的断点,包括以下几种:1. 行断点(Line breakpoints):在源代码的特定行设置断点,使程序在此处中断。
2. 函数断点(Function breakpoints):在特定函数的入口设置断点,使程序在调用该函数时中断。
3. 条件断点(Conditional breakpoints):设置一个表达式,只有在表达式为真时,程序才会在这个断点处中断。
4. 硬件断点(Hardware breakpoints):使用处理器支持的硬件断点机制设置断点。
硬件断点通常比软件断点更快,但数量有限,且某些调试器可能不支持。
5. 数据写入断点(Write watchpoints):在特定内存地址上设置断点,使程序在写入该地址时中断。
6. 数据读取断点(Read watchpoints):在特定内存地址上设置断点,使程序在读取该地址时中断。
第二步:编译程序并使用GDB启动调试会话要设置和管理断点,首先需要编译程序时启用调试信息。
使用C语言编译器(如gcc)时,可以添加-g选项,该选项会生成调试符号。
例如,在Linux上编译名为"program.c"的C程序时,可以使用以下命令:gcc -g program.c -o program接下来,使用GDB启动调试会话。
在命令行中输入"gdb program",其中"program"是编译生成的可执行文件。
了解破解的代名词或者是术语
了解破解的代名词或者是术语VM代码保护软件作者为了防止破解就把代码进行变形乱序VM的代码是灰常凌乱的看起来没有顺序感觉和正常的代码比较灰常的奇怪断点又分INT3断点和硬件断点区别在于一个能看见一个看不见然后in3断点容易被检测领空这是个比较难理解的问题领空分为系统领空和程序领空一般来说以004开头的地址是程序的领空然后系统的领空一般是以7开头大家需要注意的一个问题是系统的领空千万不能去修改像这样修改是不允许的不然系统崩溃就玩完....段首和段尾段首是上一段的结尾也是下一段的开头一段是以retn开始和retn结尾我们经常听到在段首下断所以我们要找的就是retn下面第一个push 我现在给大家找一段像这一段代码段首是以push开始滴所以我们不会在retn那里下段而段尾我们是在retn 处下断因为软件的子程序是以retn返回到某一地方所以返回的时候要在retn出下断山寨估计大家也听到很多了山寨其实就是做一个管理端把软件连接到你自己的服务器成为你的软件管理端就是管理你的软件比如说我这个软件要山寨我就把软件的连接服务器地址给改成你自己的然后你做出一个管理端来管理你的软件山寨所具备的条件:传输密码服务器地址服务器文件传输密码是验证服务器的如果没有传输密码的话是无法连接服务器进行验证的爆破我们破解一般分为两种追码和爆破爆破就是通过改动代码实现我们所要的我先演示下假如说这个跳实现了他就是注册失败如果没有实现就是成功那我们就让跳不实现这样就成功了这个过程就叫爆破追码他是通过跟踪假的注册码找到真正的注册码有的软件是一机一码注册的并且是本地验证所以我们可以通过输入假的注册码找到对比的地方找到注册码这个过程成为爆破当然有的软件没那么容易追码的他会把假码和真码进行加密后再对比或者干脆让你输入注册码以后让你重启软件在软件启动的时候进行对比这个就叫做重启验证Patch大家很少接触到的一个技术这个是我在不久前看教程看到的大家都知道软件作者为了压缩软件的体积或者是防破解都会加壳加壳的程序都不能直接保存需要打补丁而patch就是通过不打补丁破解带壳文件并且是直接保存的这个我以后会告诉大家的补丁上面也说过了软件加壳后不能直接修改保存文件所以要打补丁进行内存修改这样就可以达到我们破解的目的当然补丁也并为万能的壳有可能会进行防内存写入什么的堆栈回溯我们常说的F12暂停法就是通过堆栈返回比如说我们要找到这个软件的信息框是哪调用的我们就可以通过暂停法回溯到那里我记得软件窗体也可以的一般来说没有经过特殊处理的E语言程序都可以通过这个方法非万能啊字符串说白一点就是给你点提示OD的搜字符串不给力的以这个软件为例看我演示下软件已经断下了我把断点撤销点暂停然后回溯这里有两个地方调用一个是电脑系统调用一个是程序调用我们当然要找程序的调用啦看到没很容易就找到了API怎么说呢就是电脑的某个地方的名字吧这东西还真不好解释大概的意思就是说如果我们调用信息框那么就是调用系统的MessageBox 还是百度给力啊OEP程序的入口点如果我们找到OEP 我们就能快速脱壳就类似于找到钥匙就能开门壳就是一把锁OEP就是锁孔关于怎么找OEP一般来说有几种方法以后会说IAT就是指针脱壳的话可能要修复指针如果没有指针就相当于人只有一个身体没有灵魂壳可能会对指针进行处理这个小菜也不怎么了解大家还是百度吧反正大家要知道修复输入表就是修复IAT壳保护程序或者压缩体积的东西分为加密壳和压缩壳加密壳就是保护软件滴有各种anti或者检测脱壳就是把保护壳去掉更好的调试和破解能清楚看到代码花指令就是保护代码的指令很乱很乱类似于VM 但和VM不同一般E语言程序会加花指令进行代码保护有插件我好像在第二课讲了Push窗体这么跟大家说吧一个软件有验证窗体有功能窗体我们要让他启动的时候就过掉验证窗体不要验证窗体直接使用功能我个人好像就知道E语言可以进行以前的CC老版本可以进行push窗体飘零金盾可可也可以但是可能没功能而且飘零那货好坏的push窗体好像会检测检测到改变了就蓝你本地封包也是破解的一种方法网络验证通过发送输入到服务器服务器验证过后就发送数据回到软件进行对比正确就让你用功能不正确就失败所以只要我们做个数据发给服务器服务器给正确的数据给软件就能用了但是这个方法一定要正确的帐号和密码用于网络验证注册机用于一机一码的软件注册码有可能是通用有可能是算出来的所以我们可以通过逆出算法算出正确的注册码也可以做内存注册机直接拦截已经算出来的注册码Anti反调试一般来说是检测调试器OD 所以我们才有隐藏插件SOD 检测到好一点的作者就退出不好的话就蓝你格你各种狠壳的话一般就是直接终止比较变态啊时钟检测如果大家玩过新版本的CC 飘零金盾就知道如果你下F2按钮事件断点他就自动断下无法找到正确的按钮事件也是防止破解的一个方法还有就是检测hosts文件和ESP11.dll CC的一般会检测这两个飘零就只是检测hosts有木有被修改都是防止直接拦截软件验证进行IP转向到你的服务器等自校验防止软件被脱壳破解的一种方法脱壳的话软件体积会增大所以一般的自校验是获取软件的大小进行对比还有的就是MD5校验如果软件改动了一个字节都会改变MD5比较蛋疼的一个问题暗桩自校验和暗桩又有点不同暗桩是指软件的二次验证比如说你破解了一个软件的功能但是软件会进行二次校验通过比对以后看你是不是注册用户如果不是的话就没功能什么的Stlen Code抽代码的意思软件为了防止脱壳就把入口点的代码抽取掉各种坏啊抽取后的软件剩下的就是一个假的OEP了所以我们要补码什么的灰常烦和VM一样蛋疼一般来说遇到强壳像TMD SE VMP ZP Asprotect Acprotect AMD(穿山甲)几大强壳都是有各种抽取滴其中以SE最变态不要说脱壳机脱壳脚本就是连脱壳教程也少得可怜各种难那。
OD常用断点及破解总结
黑鹰基地破解提高班破解总结课一些常规断点拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A/W) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowText(A/W) 获取窗口文本拦截消息框:bp MessageBox(A/W) 创建消息框bp MessageBoxExA 创建消息框bp MessageBoxIndirect(A/W) 创建定制消息框拦截警告声:bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bp DialogBox 创建模态对话框bp DialogBoxParam(A/W) 创建模态对话框bp DialogBoxIndirect 创建模态对话框bp DialogBoxIndirectParam(A/W) 创建模态对话框bp CreateDialog 创建非模态对话框bp CreateDialogParam(A) 创建非模态对话框bp CreateDialogIndirect 创建非模态对话框bp CreateDialogIndirectParam(A/W) 创建非模态对话框bp GetDlgItemText(A) 获取对话框文本bp GetDlgItemInt 获取对话框整数值拦截剪贴板:bp GetClipboardData 获取剪贴板数据拦截注册表:bp RegOpenKey(A/W) 打开子健bp RegOpenKeyEx(A/W) 打开子健bp RegQueryValue(A/W) 查找子健bp RegQueryValueEx(A/W) 查找子健bp RegSetValue(A/W) 设置子健bp RegSetValueEx(A/W) 设置子健功能限制拦截断点:bp EnableMenuItem 禁止或允许菜单项bp EnableWindow 禁止或允许窗口拦截时间:bp GetLocalTime 获取本地时间bp GetSystemTime 获取系统时间bp GetFileTime 获取文件时间bp GetTickCount 获得自系统成功启动以来所经历的毫秒数bp GetCurrentTime 获取当前时间(16位)bp SetTimer 创建定时器bp TimerProc 定时器超时回调函数拦截文件:bp CreateFileA 创建或打开文件(32位)bp OpenFile 打开文件(32位)bp ReadFile 读文件(32位)bp WriteFile 写文件(32位)bp GetPrivateProfileStringA (ini文件)拦截驱动器:bp GetDriveTypeA 获取磁盘驱动器类型bp GetLogicalDrives 获取逻辑驱动器符号bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★bp __vbaStrCmp 比较字符串是否相等bp __vbaStrComp 比较字符串是否相等bp __vbaVarTstNe 比较变量是否不相等bp __vbaVarTstEq 比较变量是否相等bp __vbaStrCopy 复制字符串bp __vbaStrMove 移动字符串bp MultiByteToWideChar ANSI字符串转换成Unicode字符串bp WideCharToMultiByte Unicode字符串转换成ANSI字符串各分类语言程序的破解思路C类Point-H法bp GetDlgItem/GetWindowText(A/W)/GetWindowTextLength(A/W) (断输入框)bp MessageBox(A/W)(断对话框)字符串法B、D类DEDE、PE Explorer作为强有力的辅助工具关键还是找按妞事件Point-H法bp GetDlgItem/GetWindowText(A/W)/GetWindowTextLength(A/W) (断输入框)bp MessageBoxA(断对话框)字符串法FormCreateV类VBExplorer、GetVBRes、SmatCheck作为强有力的辅助工具关键还是找按妞事件bp rtcMsgBox(断对话框)E类有E-Code Explorer作为辅助工具查找按钮事件ECode法需要注意的:1、时刻不要忘记经典组合2、对于有注册错误/正确提示、未注册一启动或者关闭就跳出个注册框或者提示框、未注册一启动或者关闭就打开网页链接、未注册就功能使用限制、未注册就日期限制、未注册标题上有未注册或者试用字样的等等程序,大家就要想到可以通过找到这一类判断,然后转存跟踪!3、要警惕使用自带DLL/DLL函数来判断是否注册的程序,如38课4、要警惕CrC型的比较追码5、要警惕两类IceLicense保护的破解6、要警惕使用壳的注册机制的软件的破解,比如:使用了Armadillo、ASProtect注册机制的软件重启验证时代在变,技术在发展,可以说,现在80%-90%的软件基本都是重启验证类型的1、注册表类型Bpx RegOpenKeyA(W)Bpx RegOpenKeyExA(W)2、INI文件类型(*.reg/*.ini)Bpx GetPrivateProfileStringA3、其他文件类型(*.dat/*.lic…)Bpx CreateFileA(W)Bpx ReadFile4、DLL文件操作类型没有什么有效的拦截函数。
OD工具破解VB程序的常用断点
OD工具破解VB程序的常用断点OD工具破解VB程序的常用断点(转)-现在也流行破解常用断点设置-- 收集的精华(编缉分类好装入PYG记事本)bpx hmemcpy 破解万能断点,拦截内存拷贝动作 (注意:Win9x 专用断点,XP无效)bpx Lockmytask 当你用其它断点都无效时可以试一下,这个断点拦截按键的动作实在找不到断点可以试下面的方法:bmsg handle wm_gettext 拦截注册码(handle为对应窗口的句柄)bmsg handle wm_command 拦截OK按钮(handle为对应窗口的句柄)拦截窗口:bpx CreateWindow 创建窗口bpx CreateWindowEx(A/W) 创建窗口bpx ShowWindow 显示窗口bpx UpdateWindow 更新窗口bpx GetWindowText(A/W) 获取窗口文本拦截消息框:bpx MessageBox(A) 创建消息框bpx MessageBoxExA 创建消息框bpx MessageBoxIndirect(A) 创建定制消息框拦截警告声:bpx MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bpx DialogBox 创建模态对话框bpx DialogBoxParam(A/W) 创建模态对话框bpx DialogBoxIndirect 创建模态对话框bpx DialogBoxIndirectParam(A/W) 创建模态对话框bpx CreateDialog 创建非模态对话框bpx CreateDialogParam(A) 创建非模态对话框bpx CreateDialogIndirect 创建非模态对话框bpx CreateDialogIndirectParam(A/W) 创建非模态对话框bpx GetDlgItemText(A/W) 获取对话框文本bpx GetDlgItemInt 获取对话框整数值拦截剪贴板:bpx GetClipboardData 获取剪贴板数据拦截注册表:bpx RegOpenKey(A) 打开子健( 例:bpx RegOpenKey(A) if *(esp+8)=='****' )bpx RegOpenKeyEx 打开子健( 例:bpx RegOpenKeyEx if *(esp+8)=='****' )bpx RegQueryValue(A) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp+8)=='****' )bpx RegQueryValueEx 查找子健 ( 例:bpx RegQueryValueEx if *(esp+8)=='****' )bpx RegSetValue(A) 设置子健( 例:bpx RegSetValue(A) if *(esp+8)=='****' )bpx RegSetValueEx(A) 设置子健 ( 例:bpx RegSetValueEx(A) if *(esp+8)=='****' )注意:“****”为指定子键名的前4个字符,如子键为“Regcode”,则“****”= “Regc”==================功能限制拦截断点:bpx EnableMenuItem 禁止或允许菜单项bpx EnableWindow 禁止或允许窗口bmsg hMenu wm_command 拦截菜单按键事件,其中hMenu 为菜单句柄bpx K32Thk1632Prolog 配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处理程序应用示例:CALL [KERNEL32!K32Thk1632Prolog]CALL [......] <-- 由此跟踪进入菜单处理程序CALL [KERNEL32!K32Thk1632Epilog]======================拦截时间:bpx GetLocalTime 获取本地时间bpx GetSystemTime 获取系统时间bpx GetFileTime 获取文件时间bpx GetTickCount 获得自系统成功启动以来所经历的毫秒数bpx GetCurrentTime 获取当前时间(16位)bpx SetTimer 创建定时器bpx TimerProc 定时器超时回调函数拦截文件:bpx CreateFileA 创建或打开文件 (32位)bpx OpenFile 打开文件 (32位)bpx ReadFile 读文件 (32位)bpx WriteFile 写文件 (32位)bpx _lcreat 创建或打开文件 (16位)bpx _lopen 打开文件 (16位)bpx _lread 读文件 (16位)bpx _lwrite 写文件 (16位)bpx _hread 读文件 (16位)bpx _hwrite 写文件 (16位)拦截驱动器:bpx GetDrivetype(A/W) 获取磁盘驱动器类型bpx GetLogicalDrives 获取逻辑驱动器符号bpx GetLogicalDriveStringsA(W) 获取当前所有逻辑驱动器的根驱动器路径拦截狗:bpio -h 378(或278、3BC) R 378、278、3BC是并行打印端口bpio -h 3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口+++++++++++VB程序专用断点:++++++++++bp__vbaFreeStr 偶发现了VB杀手断点.不管是重起验证.还是有错误提示的VB..下这个断点通杀bpx msvbvm50!__vbaStrCmp 比较字符串是否相等bpx msvbvm50!__vbaStrComp 比较字符串是否相等bpx msvbvm50!__vbaVarTstNe 比较变量是否不相等bpx msvbvm50!__vbaVarTstEq 比较变量是否相等bpx msvbvm50!__vbaStrCopy 复制字符串bpx msvbvm50!__vbaStrMove 移动字符串bpx MultiByteT oWideChar ANSI字符串转换成Unicode字符串bpx WideCharToMultiByte Unicode字符串转换成ANSI字符串上面的断点对应VB5程序,如果是VB6程序则将msvbvm50改成msvbvm60即可VB程序的破解VB程序使很多朋友感到头痛,主要是VB程序反编译时产生大量的顶!代码,而且也找不到有用的信息,在动态调试过程中,顶!代码太多,往往迷失于冗余的代码中,找不到方向。
软件破解的常见10大思路
1. 断点:所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。
那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。
打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。
然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。
我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。
所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。
2. 领空:这是个非常重要的概念,但是也初学者是常常不明白的地方。
我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。
或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已。
所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。
也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。
在DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的DOS程序都会去调用各种中断来完成任务。
但是到了WINDOWS时代,程序没有权力直接调用中断,WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样,WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以WINDWOS下的软件破解其断点设置是以API函数为基础的,即当程序调用某个API函数时中断其正常运行,然后进行解密。
软件破解的常见10大思路
软件破解的常见10大思路.txt花前月下,不如花钱“日”下。
叶子的离开,是因为风的追求还是树的不挽留?干掉熊猫,我就是国宝!别和我谈理想,戒了!1. 断点:所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。
那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。
打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。
然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。
我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。
所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。
2. 领空:这是个非常重要的概念,但是也初学者是常常不明白的地方。
我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。
或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已。
所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。
也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。
在DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的DOS程序都会去调用各种中断来完成任务。
但是到了WINDOWS时代,程序没有权力直接调用中断,WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样,WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以WINDWOS下的软件破解其断点设置是以API函数为基础的,即当程序调用某个API函数时中断其正常运行,然后进行解密。
找断点最简单的方法
找断点最简单的方法
找断点的方法取决于具体的应用场景和断点的定义。
在软件开发、统计分析、物理实验等领域,都存在找断点的需求。
下面简单介绍几种常见的找断点方法,并提供一些示例来进一步说明。
1.基于可视化工具的方法:
在软件开发中,使用调试器或开发环境提供的断点功能可以直接找到代码中的断点位置。
这种方法对于调试代码异常非常有效。
示例:使用断点调试工具在代码执行过程中暂停,可以逐行查看代码的执行情况,帮助定位错误或异常的位置。
2.基于时间序列的方法:
在统计分析中,断点可以表示数据序列中的显著变化点。
常用的方法有突变检测和时间序列分析法。
示例:假设你有一系列的温度数据,你可以使用突变检测方法来找出从温度正常变化到异常变化的断点。
3.基于误差分析的方法:
在实验物理中,断点可以表示测量结果中的系统误差变化点。
通过分析误差变化的趋势,可以找到系统发生改变的位置。
示例:在实验中测量重力加速度,首先进行多组测量并计算平均值,然后观察平均值的变化情况,寻找是否存在系统误差发生变化的断点。
4.基于异常检测的方法:
在数据分析中,可以使用异常检测算法来找到时间序列或多维数据集中的异常点,这些异常点可能表示断点位置。
示例:在金融领域,通过对股票价格时间序列进行异常检测,可以找到股票价格在关键时刻的断点位置。
以上是一些常见的找断点的方法,具体选择哪种方法取决于需要解决的问题和数据的特点。
在实际应用中,通常需要结合领域知识和统计分析的方法,综合考虑多个因素来找到最简单、最有效的断点方法。
断点管理办法(两篇)
断点管理办法(二)断点管理办法(二)1. 引言在软件开发过程中,断点管理是一项关键的任务。
它在调试代码的过程中起到了至关重要的作用,帮助开发人员快速找出错误并修复它们。
本文将继续探讨断点管理的方法和技巧,以便更有效地进行软件调试。
2. 断点类型在断点管理中,存在多种类型的断点。
常见的断点类型包括:- 行断点:指定在特定源代码行上停下来。
- 条件断点:指定满足特定条件时停止。
- 计数断点:指定当特定代码块被执行特定次数时停止。
- 异常断点:指定当发生特定类型的异常时停止。
- 日志断点:指定在产生特定日志消息时停止。
不同的断点类型适用于不同的调试场景。
选择恰当的断点类型可以大大提高调试的效率。
3. 断点策略- 最小化断点数量:在设置断点时,尽量选择最少的断点数量。
过多的断点可能会导致调试过程的复杂性增加,使得问题难以定位。
- 注释无用断点:当你确定一个断点已经不再需要时,应及时注释或删除它。
保持代码中的无用断点会浪费调试资源,并可能与新的断点产生冲突。
- 分组断点:将相关的断点分组进行管理,可以让调试工作更加有条理。
例如,将与特定功能模块相关的断点放在一起,可以更方便地跟踪和修复问题。
- 恢复断点:在调试过程中,可能会遇到某些断点需要暂时屏蔽或跳过的情况。
恢复断点是一种有效的方法来控制程序的执行流程,使得调试过程更加流畅。
4. 断点调试技巧在使用断点进行调试时,还有一些技巧可以提高效率和准确性:- 使用条件断点:通过设置条件,只在满足特定条件时才停止程序的执行。
这可以帮助快速定位问题并减少不必要的中断。
- 充分利用调试工具:现代化的集成开发环境(IDE)通常提供了强大的调试工具。
在进行断点调试时,利用这些工具的特性,如变量监视、堆栈跟踪等,可以更全面地了解程序运行的状态。
- 批量设置断点:如果需设置大量相似的断点,可以考虑使用批量断点设置功能,减少手动设置断点的工作量。
5. 断点管理工具除了IDE提供的调试工具外,还有一些专门的断点管理工具可以帮助开发人员更好地管理和调试断点。
间断点一般怎么找
间断点一般怎么找
断点的定义是:指的是在软件上的一个特殊的点,它表示程序的执行正在暂停,帮助开发人员查找问题并修复错误。
查找断点一般需要使用专业的调试工具。
这类工具都有各自不同的特性,一些工具帮助检测程序执行状态,另一些工具则帮助找到在模块级别的报错,具体的工具使用还要根据个人情况定义。
针对断点的查找,我们通常用到的技术有三种:1)断点调试;2)跟踪调试;3)入侵调试。
断点调试是最常用的调试技术,它可以将程序代码划分成多个断点,每个断点可以检测出程序运行时某个特定点上发生的事件,从而帮助我们找出断点。
跟踪调试主要是改进断点调试,它有助于跟踪程序代码的执行,捕获程序运行时发生的事件,从而快速找到断点。
入侵调试是一种特殊的调试技术,它可以在系统正在运行的情况下,在不中断正常程序运行的情况下,使用简单的步骤分析程序运行历史记录,从而发现断点。
从上面提到的这几种调试技术来看,断点调试是最常用的方法。
此外,还有一些不太专业的调试方法经常被用来查找断点,比如使用报告生成器,日志文件分析,等等。
这些方式都侧重于收集程序执行的历史记录,然后根据这些历史记录中的报错信息来推断代码出错的原因。
通过这种方式,我们可以快速找到问题断点,帮助开发人员快速定位和修复错误。
总而言之,找断点可以使用专业的调试工具,也可以使用不是很专业的工具,从而有助于开发人员快速找到问题并解决问题。
只要根据自身实际使用情况选择合适的工具,就可以帮助我们发现断点,并修复错误。
软件破解常见的问题-逆向工程的应用
软件破解常见的问题-逆向工程的应用摘要:通过分析几种常规软件破解的方式,以破解出发,并提出了编写应用程序需要注意和改进的地方。
关键词:软件破解技术;加壳软件;逆向工程1引言软件破解主要从两个方面人手,第一是脱掉保护软件的壳,现在的软件出厂一般都使用了加密壳、压缩壳、伪装壳、多层壳等技术,脱掉软件的壳是能进行跟踪调试的前提条件。
第二是根据软件的注册性质决定采取什么对策进行序列号推算,暴力破解等。
2.1壳概述在一些计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序,它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
当加壳后的文件执行时,壳一这段代码先于原始程序运行,它把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(人口点,防止被破解)。
2.2加壳软件作者编好软件后,编译成exe可执行文件。
有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名等,即为了保护软件不被破解,•通常都是采用加壳来进行保护。
若需要把程序压缩小一些,从而方便传输,于是,需要用到一些软件,它们能将exe可执行文件压缩。
另外在黑客界给木马病毒等加壳以躲避杀毒软件。
能实现上述功能的这些软件称为加壳软件,如ASPACK,UPX,PEcompace等。
2.3侦壳软件侦测壳和软件所用编写语言的软件为侦壳软件。
脱壳之前必须要查它的壳的类型。
常用侦壳软件有peid,fi等。
2.4脱壳软件常用的脱壳工具如下:(1)文件分析工具(侦测壳的类型):Fi,Get-Typ,peid,pe—scan;(2)OEP人口查找工具:peid;(3)调试工具:SoftICE,TRW,ollybdg;(4)Dump工具:IceDump,TRW,PEditor,ProcDump32,lmrdPE;(5)PE文件编辑工具:PEditor,Proc.Dump32,LordPE;(6)重建ImportTable工具:ImportREC,Re-Virgin。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5、rtcGetPresentDate //取得当前日期
针对字串:
__vbaStrComp
__vbaStrCmp
__vbaStrCompVar
__vbaStrLike
__vbaStrTextComp
__vbaStrTextLike
针对变量:
按几次F5出册码出来了。
bpx regqueryvalueexa do "d esp->8"(trw)
vbaVarTstEq 判断是否注册的函数
(0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], ax
改为0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], bx)
破解常用断点
常用断点(OD中)
网络验证断点:
bp send
bp recv
bp connect
bp WSASend
bp WSARecv
拦截窗口:
bp CreateWindow 创建窗口
bp CreateWindowEx(A) 创建窗口
bp ShowWindow 显示窗口
小球[CCG]
那要看是在哪作的标记,通常是在注册表中留下信息!
在softice中就要用bpx regqueryvalueexa do "d esp->8"来中断看看,
在trw中要用bpx regqueryvalueexa do "d*(esp+8)"来中断看看。
还有的是在本目录下留下注册信息,常见的有.dat .ini .dll等等,
还有一个是最难的,就是去掉水印!
也可以三种情况:
A.水印是位图文件(bitblt,creatBITMAP等位图函数)
B.水印是明显字符(反译分析)
C.水印不是明显字符(如:This a demo!它只是显示在另一个制作文件上,可是*.htm *.exe等)
C.才是最难搞,也是很多人想知道的!包括我在内。不知道高手们有何提示了?
__vbaVarCompEq
__vbaVarCompLe
__vbaVarCompLt
__vbaVarCompGe
__vbaVarCompGt
__vbaVarCompNe
VB的指针:
THROW
VB DLL还调用了oleauto32.dll中的部分函数。oleauto32.dll是个通用的proxy/stub DLL,其每个函数的原型在<oleauto.h>中定义,并在MSDN中有详细描述。这也有助于理解VB DLL中的函数的作用。
拦截警告声:
bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
拦截对话框:
bp DialogBox 创建模态对话框
bp DialogBoxParam(A) 创建模态对话框
bp DialogBoxIndirect 创建模态对话框
bp DialogBoxIndirectParam(A) 创建模态对话框
ReadFile
CreateFileA
注册表常用中断
RegQueryvalueA
RegQueryvalueExA
狗加密中断
BPIO -h 278 R
BPIO -h 378 R
其它常用函数断点
CreateFileA (读狗驱动程序),
DeviceIOControl,
bp RegSetValue(A) 设置子健
bp RegSetValueEx(A) 设置子健
功能限制拦截断点:
bp EnableMenuItem 禁止或允许菜单项
bp EnableWindow 禁止或允许窗口
bp send 网络访问断点
bp recv 返回信息断点
拦截关机重启:
bp ExitWindowsEx 重启问题 bp断在系统领空
我是用bpx readfile来中断的,还有的是在windows目录下留下注册信息。
你可以借助专用的工具帮助你查看,入filemon等!
vb:
1、__vbaVarTstNe //比较两个变量是否不相等
2、rtcR8ValFromBstr //把字符串转换成浮点数
3、rtcMsgBox 显示一信息对话框
int 2fh (dos)
32:
GetDriveTypeA
GetFullPathNameA
GetWindowsDirectoryA
读磁盘中断
GETLASTERROR 返回扩充出错代码
限制中断
EnableMenuItem 允许、禁止或变灰指定的菜单条目
EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)
bp SetTimer 创建定时器
bp TimerProc 定时器超时回调函数
GetDlgItemInt 得指定输入框整数值
GetDlgItemText 得指定输入框输入字符串
GetDlgItemTextA 得指定输入框输入字符串
拦截文件:
bp CreateFileA 创建或打开文件 (32位)
bp GetDlgItemInt 获取对话框整数值
拦截剪贴板:
bp GetClipboardData 获取剪贴板数据
拦截注册表:
bp RegOpenKey(A) 打开子健
bp RegOpenKeyEx 打开子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
postquitmessage (Cracking足彩xp,很有用^_^)
vb:
_rtcMsgBox
ini文件内容常用中断
GetPrivateProfileStringA
GetPrivateProfileProfileInt
key文件:
getprivateprofileint
API不太知道,也许可以通过BIOS在98平台上读写扇区,不过在2000/NT下可以通过内黑ATAPI,HAL写扇区
machoman[CCG]
bpx WRITE_PORT_BUFFER_USHORT
NT/2000下这个断点,当edx=1f0h,时,可以看见EDI地址内数据为扇区位置数据,必须先 在winice.dat 中装入hal.sys 详细内容看ATAPI手册
bp __vbaStrCmp 比较字符串是否相等
bp __vbaStrComp 比较字符串是否相等
bp __vbaVarTstNe 比较变量是否不相等
bp __vbaVarTstEq 比较变量是否相等
bp __vbaStrCopy 复制字符串
bp __vbaStrMove 移动字符串
bp MultiByteToWideChar ANSI字符串转换成Unicode字符串
__vbaVarTstNe似乎是用来进行自校验的,正常情况下返回值为0。
已知适用的软件有:网络三国智能机器人、音乐贺卡厂。当这两个软件被脱壳后都回出错,网络三国智能机器人会产生非法*作,而音乐贺卡厂会告诉你是非法拷贝,通过修改__vbaVarTstNe的返回值都可让它们正常运行。
所以当您遇到一个VB软件,脱壳后无法正常运行,而又找不出其它问题时,可试试拦截这个函数,说不定会有用哦。8-)
FreeEnvironmentStringsA (对付HASP非常有效).
Prestochangoselector (16-bit HASP's), '7242' 查找字符串 (对付圣天诺).具体含义参考下面的范例。
光盘破解中断
16:
getvolumeinformaticomp (trw)
Bpx __vbaStrComp (记得是两个 '_')
MSVBVM60!_vbastrcomp|sofice
MSVBVM50! |
VBAI4STR
Ctrl+D
bpx msvbvm60!__vbastrcomp do "d *(esp+0c)"(softice)
bp UpdateWindow 更新窗口
bp GetWindowText(A) 获取窗口文本
拦截消息框:
bp MessageBox(A) 创建消息框
bp MessageBoxExA 创建消息框
bp MessageBoxIndirect(A) 创建定制消息框
bp IsDialogMessageW
bp CreateDialog 创建非模态对话框
bp CreateDialogParam(A) 创建非模态对话框
bp CreateDialogIndirect 创建非模态对话框
bp CreateDialogIndirectParam(A) 创建非模态对话框
bp GetDlgItemText(A) 获取对话框文本
时间常用中断
GetSystemTime
GetLocalTime
GetTickCount
vb:
rtcGetPresentDate //取得当前日期
杀窗常用中断
Lockmytask (win9x专用)
bp ExitProcess 退出进程
DestroyWindow