OD按钮单击事件下断点脚本

下载地址:http://download.csdn.net/detail/friendan/9402854


///

/// //
/// OD按钮单击事件下断点脚本V1 //
/// //
/// /
/// 2016/01/11 by friendan /
/


/
/ 本脚本用到的全局变量声明
/
var iBpCount
var startAddr // 搜索起始地址
mov iBpCount,0 // 断点总数计数器
mov startAddr,401000 // 如果搜索不到,改下这里即可


// 我以为从入口处开始搜索会快一些,发现这样会漏结果哈
//gpi MAINBASE // 取EXE模块基址,结果放到$RESULT中
//mov startAddr,$RESULT
//mov eax,startAddr
//add eax,[startAddr+3C] // 得到PE标志地址
//add eax,4 // 跳过PE标志
//add eax,14 // 跳过PE文件头IMAGE_FILE_HEADER,0x14=20
//add eax,10 // 跳动PE入口点偏移地址 0x10=16
//mov eax,[eax] // 获取入口偏移
//add eax,startAddr // 基址+入口偏移=入口地址
//mov startAddr,eax

/



/// 输入信息提示框
///
ask "输入相应数字下断点:1(Delphi/BC++)  2(VB)  3(MFC) 4(VC++) 5(易语言)  6(万能断点)"
cmp $RESULT, 1
je DelphiBnClick_Start
cmp $RESULT, 2
je VBBnClick_Start
cmp $RESULT, 3
je MFCBnClick_Start
cmp $RESULT, 4
je VCBnClick_Start
cmp $RESULT, 5
je ELBnClick_Start
cmp $RESULT, 6
je WNBnClick_Start
msg "骚年,输错了吧,只能输入数字1到6哈。。。"
ret

/// 输入信息提示框 end
///





/ Delphi/BC++程序按钮单击事件脚本

DelphiBnClick_Start:
find startAddr, #740E8BD38B83????????FF93# // Delphi单击事件特征码
cmp $RESULT,0 // 判断是否找到特征码
je DelphiBnClick_End // 没找到就结束查找


mov eax,$RESULT // 特征码起始地址入eax
add eax,A // 起始地址+A(11)
bp eax // 在CALL处下断点
mov startAddr,eax // 更新查找起始地址
add iBpCount,1 // 断点计数器加1
jmp DelphiBnClick_Start // 跳回去循环查找


DelphiBnClick_End:
itoa iBpCount,10. // 断点计数器转为10进制,转换结果放到$RESULT中
eval "恭喜,下Delphi/BC++按钮单击事件断点完毕,断点总数:{$RESULT}"
msg $RESULT
ret // 退出脚本
//
/ Delphi/BC++程序按钮单击事件脚本 end
///



/ VB程序按钮单击事件脚本

VBBnClick_Start:
find startAddr, #816C24# // VB单击事件特征码
cmp $RESULT,0 // 判断是否找到特征码
je VBBnClick_End // 没找到就结束查找


mov eax,$RESULT // 特征码起始地址入eax
add eax,8 // 起始地址+0x8
bp eax // 在CALL处下断点
mov startAddr,eax // 更新查找起始地址
add iBpCount,1 // 断点计数器加1
jmp VBBnClick_Start // 跳回去循环查找


VBBnClick_End:
itoa iBpCount,10. // 断点计数器转为10进制,转换结果放到$RESULT中
eval "恭喜,下VB按钮单击事件断点完毕,断点总数:{$RESULT}"
msg $RESULT
ret // 退出脚本
//
/ VB程序按钮单击事件脚本 end
///



/ MFC程序按钮单击事件脚本

MFCBnClick_Start:
//findcmd startAddr,"SUB EAX,0xA" // MFC单击事件汇编命令特征
find startAddr,#83E80A# // MFC单击事件汇编命令特征
cmp $RESULT,0 // 判断是否找到特征码
je MFCBnClick_End // 没找到就结束查找


mov eax,$RESULT // 特征码起始地址入eax
add eax,3 // 特征码起始地址+0x3,即获取JE指令地址
mov startAddr,eax // 更新查找起始地址
opcode eax // 反汇编eax地址处指令
readstr $RESULT_1,2 // 取反汇编指令字符串中的前2个字符,结果放到$RESULT中
scmpi "JE",$RESULT,2 // 判断是否是JE指令
jne MFCBnClick_Start // 不是的话,就重新找下一个特征码


gci eax,DESTINATION // 获取JE跳到的地址,结果放到$RESULT中
mov eax,$RESULT // JE跳到的地址放入eax中
add eax,3 // 地址加3指向下一条指令地址
opcode eax // 反汇编下一条指令,结果放到$RESULT中
readstr $RESULT_1,4 // 取反汇编指令字符串前4个字符,结果放到$RESULT中
scmpi "CALL",$RESULT,4 // 判断是否是CALL指令
jne MFCBnClick_Start // 不是的话,就重新找下一个特征码


bp eax // 在CALL处下断点
add iBpCount,1 // 断点计数器加1
jmp MFCBnClick_Start // 跳回去循环查找


MFCBnClick_End:
itoa iBpCount,10. // 断点计数器转为10进制,转换结果放到$RESULT中
eval "恭喜,下MFC按钮单击事件断点完毕,断点总数:{$RESULT}"
msg $RESULT
ret // 退出脚本
//
/ MFC程序按钮单击事件脚本 end
///



/ VC++程序按钮单击事件脚本
VC++下断点和MFC是一样的,区别是VC++在CALL处断下后,
/// 需要按一次F7,两次F8,才能进入真正的单击事件代码中。
VCBnClick_Start:
jmp MFCBnClick_Start
//
/ VC++程序按钮单击事件脚本 end
///



/ 易语言程序按钮单击事件脚本

ELBnClick_Start:
find startAddr, #FF55FC5F5E# // 易语言单击事件特征码
cmp $RESULT,0 // 判断是否找到特征码
je ELBnClick_End // 没找到就结束查找


mov eax,$RESULT // 特征码起始地址入eax
bp eax // 在CALL处下断点
add eax,5
mov startAddr,eax // 更新查找起始地址
add iBpCount,1 // 断点计数器加1
jmp ELBnClick_Start // 跳回去循环查找


ELBnClick_End:
itoa iBpCount,10. // 断点计数器转为10进制,转换结果放到$RESULT中
eval "恭喜,下易语言按钮单击事件断点完毕,断点总数:{$RESULT}"
msg $RESULT
ret // 退出脚本
//
/ 易语言程序按钮单击事件脚本 end
///





/ 万能断点按钮单击事件脚本
注意哈万能断点在模块User32.dll中
WNBnClick_Start:
pusha
loadlib "user32.dll"
popa
mov startAddr,$RESULT
find startAddr, #F3A58BC883E103F3A4E8# // 万能断点特征码
cmp $RESULT,0 // 判断是否找到特征码
je WNBnClick_End // 没找到就结束查找


mov eax,$RESULT // 特征码起始地址入eax
bp eax // 在CALL处下断点
add eax,5
mov startAddr,eax // 更新查找起始地址
add iBpCount,1 // 断点计数器加1
jmp WNBnClick_Start // 跳回去循环查找


WNBnClick_End:
itoa iBpCount,10. // 断点计数器转为10进制,转换结果放到$RESULT中
eval "恭喜,下万能断点单击事件断点完毕,断点总数:{$RESULT}"
msg $RESULT
ret // 退出脚本
//
/ 万能断点按钮单击事件脚本 end
///















































































你可能感兴趣的:(OD,PJ)