od用法
- 基本设置
这里是使用的吾爱破解的专用版OD,文字汉语 操作就很方便了
tips:加入到右键菜单
- 调试文件的方式
OllyDBG 有三种方式来载入程序进行调试,一种是点击菜单 文件->打开 (快捷键是 F3)来打开一个可执行文件进行调试,
另一种是点击菜单 文件->附加 来附加到一个已运行的进程上进行调试。注意这里要附加的程序必须已运行。
第三种就是用右键菜单来载入程序(不知这种算不算)。一般情况下我们选第一种方式。比如我们选择一个 test.exe 来调试,通过菜单 文件->打开 来载入这个程序
同时我们可以使用 ollydbg -p pid的值来调试隐藏的进程
icesord 来查看进程的pid
Traceme 案列分析
使用ASCCII 码的traceme来进行调试
ctrl+g设置断点 输入GetDlgItemTextA定位到方法处 按F2下断点
方法二:
上面那个GenRegCode的返回值存储正在eax中 如果为真及返回1,错误即返回0;
在这一句修改eax的值 即可跳转到正确的流程
方法三: NOP掉判断代码
上面这三种方式都是在内存中手动修改代码或者寄存器的值。无法实际落盘到磁盘中。下面我们尝试将第三种方法持久化。
右键选择修改过后的代码并存放到可执行后文件,最后保存文件为traceme-patch.exe
算法分析
该注册机的算法代码
unsigned char Table[8] = {0xC,0xA,0x13,0x9,0xC,0xB,0xA,0x8}; //计算序列号要用的数据表,全局变量
/*-------------------------------------------------------------*/
/* GenRegCode - 注册算法主函数 */
/*-------------------------------------------------------------*/
BOOL GenRegCode( TCHAR *rCode, TCHAR *name ,int len)
{
int i,j;
unsigned long code=0;
for(i=3,j=0;i7) j=0;
code+=((BYTE)name[i])*Table[j];
}
wsprintf(name,TEXT("%ld"),code);
if(lstrcmp(rCode, name)==0) //比较真假序列号,这里为了省事,直接比较了
return TRUE;
else
return FALSE;
}
使用python写一个
z = 3
j = 0
code = 0
table = [0xC, 0xA, 0x13, 0x9, 0xC, 0xB, 0xA, 0x8]
cname = input("Enter a number: ")
for i in range(z,len(cname)):
if j > 7:
j = 0
code = code + table[j] * ord(cname[i]) #注意16进制转ascci码
i=i+1
j=j+1
print(code)
od断点
硬件断点
内存断点
消息断点
(windows的机制 当用户点击一个按钮,移动鼠标或者键入文字时 都会发送消息给当前的窗体 消息为四个参数 hwnd msg longA longB )
条件断点
按照寄存器的条件中断
按存储器条件中断
vs2017 编译加入调试符号
https://msdn.microsoft.com/zh-cn/library/xe4t6fc1.aspx