VB Pcode 动态调试要点

摘要:
P-code伪编码,用od太麻烦,需用到WKTVBDebugger方法1:把cm放到wktv目录下面,打开,运行机器码与命令:BranchF:机器码1C类似jnz/jne如果堆栈为0就跳BranchT:机器码1D类似je/jz如果堆栈为-1就跳Branch:机器码1E类似jmp无条件跳单击‘高级信息’或‘AnalizeBranchX'可看到当前进程所有跳转位置EqVarBool:机器码33比较指令

P-code伪编码,用od太麻烦,需用到WKTVBDebugger

方法1:

把cm放到wktv目录下面,打开,运行

机器码与命令:

BranchF: 机器码1C 类似jnz/jne 如果堆栈为0就跳

BranchT: 机器码1D 类似je/jz 如果堆栈为-1就跳

Branch: 机器码1E 类似jmp 无条件跳

单击‘高级信息’或‘Analize BranchX' 可看到当前进程所有跳转位置

EqVarBool: 机器码33 比较指令,根据结果将0或-1压入堆栈

ConcatStr: 机器码2A 字符串连接指令 ,此指令单步跟踪时会在日志窗口留下相应结果,可ctr+O在此处下断

LitI2_Byte: 机器码F4 将数据压入堆栈

FLdZeroAd/CVarStr:取字符串指令,特点同ConcatStr

方法2:

也可结合VB Decompiler找到if地址,(或直接在这里推导算法),个人推荐直接推导算法

去od的dump窗口找这个地址,把1C改成1D即可爆破

方法3:

VBParser先分析一下,

然后倒入od,在关键处下内存断点,单步跟

现在用方法2举个栗子:

cm导入vb decompiler:

Dim var_11C As Variant
Dim var_176 As Integer
loc_40E28C: If (Me.txtname.Text = vbNullString) Then
loc_40E2B0: MsgBox("You have to enter you name first.", &H40, "Error", var_FC, var_11C)
loc_40E2C0: Exit Sub
loc_40E2C1: End If
loc_40E2E1: If (Me.txtkey.Text = vbNullString) Then
loc_40E305: MsgBox("You have to enter a key first.", &H40, "Error", var_FC, var_11C)
loc_40E315: Exit Sub
loc_40E316: End If
loc_40E336: If (Me.txtkey.Text = vbNullString) Then
loc_40E35A: MsgBox("You have to enter at least 5 chars.", &H40, "Error", var_FC, var_11C)
loc_40E36A: Exit Sub
loc_40E36B: End If 上面是查看name和key是否为空且name必须长度大于5
loc_40E393: For var_14C = 1 To CVar(Len(Me.txtname.Text)): var_12C = var_14C 'Variant 变量12c=变量14c
loc_40E3C1: var_FC = Mid(CVar(Me.txtname.Text), CLng(var_12C), 1) FC轮询name每一位
loc_40E3D5: var_11C = var_94 & CVar(Asc(CStr(var_FC))) 变量94= name每一位变体,并组合,例如name为‘11111’那么变量94=‘4949494949’
loc_40E3D9: var_94 = var_11C 'Variant
loc_40E3EF: Next var_14C 'Variant
loc_40E3F5: ' Referenced from: 40E422
loc_40E404: If (Len(var_94) > 9) Then 变量94反复除以3.14直到变量94为9位数
loc_40E41E: var_94 = Fix((var_94 / 3.141592654)) 'Variant 并赋值给变量94
loc_40E422: GoTo loc_40E3F5
loc_40E425: End If
loc_40E449: var_94 = (var_94 Xor &H30F85678 - CVar(global_76)) 'Variant 变量94与30F85678异或,再减去全局变量76,通过其他函数可以查到全局变量,大家自己动手查查
loc_40E45A: For var_170 = 1 To 10: var_12C = var_170 'Variant
loc_40E489: If (Me.txtkey.Text = global_52(CLng(var_12C))) Then
loc_40E48C: End If
loc_40E48F: Next var_170 'Variant
loc_40E4DE: If ((CVar(Me.txtkey.Text) - var_94) = CVar(Len(Me.txtname.Text))) Then 密码-变量94=name长度,得密码
loc_40E502: MsgBox("Wow, you have found a correct key!", &H40, "Correct key", var_FC, var_11C)
loc_40E533: MsgBox("Mail me, how you got it: CyberBlade@gmx.net ", &H40, "Correct key!", var_FC, var_11C)
loc_40E550: Me.Command2.Caption = "Exit"
loc_40E55B: Else
loc_40E567: global_80 = (global_80 + 1)
loc_40E570: var_176 = global_80
loc_40E579: If (var_176 = 6) Then
loc_40E5B3: If (MsgBox("-=Do you need a hint ?=-", &H24, "I can't stand it anymore", var_FC, var_11C) = 7) Then
loc_40E5B6: Exit Sub
loc_40E5BA: Else
loc_40E5DB: MsgBox("Forget it.", &H40, "he, he...", var_FC, var_11C)
loc_40E5F0: global_80 = 0
loc_40E5F3: End If
loc_40E5F6: Else
loc_40E5FC: If (var_176 > 3) Then
loc_40E620: MsgBox("Have you ever been trying to be successful in cracking my password ?", &H20, "Failed", var_FC, var_11C)
loc_40E633: Else
loc_40E639: If (var_176 <= 3) Then
loc_40E65D: MsgBox("Sorry, wrong key.", &H40, "Failed", var_FC, var_11C)
loc_40E66D: End If
loc_40E66D: End If
loc_40E66D: End If
loc_40E66D: End If
loc_40E677: Me.txtkey.SetFocus
loc_40E67F: Exit Sub

所以说我个人是十分推荐方法2的,一目了然

免责声明:文章转载自《VB Pcode 动态调试要点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浅谈SQL Server触发器的使用KAL1 LINUX 官方文档之kali nethunter文档 ---NetHunter Chroot管理器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Node.js给图片加水印的方法

一、准备工作: 首先,确保你本地已经安装好了node环境。 然后,我们进行图像编辑操作需要用到一个Node.js的库:images。 这个库的地址是:https://github.com/zhangyuanwei/node-images,作者定义它为 “Node.js轻量级跨平台图像编解码库” ,并提供了一系列接口。 我们要做的首先是安装images库:...

百度地图常用 获取中心点 缩放级别等

功能一:获取map地图窗口的可视区域: var map = new BMap.Map("allmap");            // 创建Map实例 map.centerAndZoom(new BMap.Point(116.4035,39.915), 14);  //初始化时,即可设置中心点和地图缩放级别。 var bs = map.getBound...

nginx配置静态路径

原因:文件资料上传至ftp上,由于需要大量图片回显,导致服务器压力过大,反应不过来,所以改为通过nginx做静态资源代理。 服务器路径为:/var/ftp/2020/10/09/12a1b8f973fc4d51b67e9a168fcb757f1602227927258.jpg 初次尝试,是通过: location /ftp/ {      root /va...

批处理bat脚本自动配置java的jdk环境变量

前言 每当更换电脑或者是重装系统之后,都需要重新配置java系统路径。但是又不想每次都去查配置方法,所以写了个脚本自动配置。 脚本内容 @echo off @echo 第一步 输入要设置的JAVA_HOME路径:(As example: D:\Program Files\Java\jdk1.8.0_181) set /p input="请输入JAVA_H...

isequal 和startswith 使用

如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作: :fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log :FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log :FROMHOST-IP, startswith,...

sqlserver的存储过程

继上一个数据库分页功能完成之后,这周开始进行一个sqlserver数据库的存储过程查询和运用。之前只了解过mysql数据库和oracle数据库,对于存储过程的了解只是在oracle数据库上面有所运用。加上对sqlserver数据库不太了解,所以一开始有点无从下手,看了一些资料。了解存储过程实际上就是将一些查询语句与数据库的事务处理相结合,方便我们在运用的时...