‘壹’ 被VMP过的代码有什么特点
这个应该是Themida 入口
老版本VMP入口的是
push XXXXXXXX ; XXXXXXX是个常量 用来做后面解密的
call XXXXXXXX ;VM_START
新版本是一个直接jmp
‘贰’ VMP 壳是什么壳》
是VMP加过的,VMP理论上应该还不算是壳,只是一种将代码变形的工具,但强度非常高,目前还没有人公开宣称能还原VM过的代码,放弃吧,破解不了的
‘叁’ vmpvmprotect 加密的程序 请帮帮我
虚拟机加密,就是说像VMP这样的保护程序,它会把源程序的X86指令变成自定义的伪指令,等到执行的时候,VMP内置在保护程序中的VM就会启动,读取伪指令,然后解析执行。
VMP是一个堆栈虚拟机,它的一切操作都是基于堆栈传递的。在VMP中,伪指令就是一个个的handler,VM中有一个核心的Dispatch部分,它通过读取程序的bytecode,然后在DispatchiTable里面定位到不同的handler中执行。
绝大多数情况下,在一个handler中执行完成后,程序将回到Dispatch部分,然后到next handler中执行。
‘肆’ 易语言做穿越火线辅助
你好,场面话我不太会说索性也就不说了。直奔主题,如题。易语言做穿越火线辅助。
我不同意那位热心网友的说法,穿越火线会更新这是事实,但是辅助做好了系统不会自动更新的,动态数据应该是他口中的一级基址吧。可以通过偏移来获取二级基址。辅助也可以自动更新,免费辅助除外。
做辅助,说容易也容易说难也不难,首先你要学会基本知识。不然很难理解辅助的思路。
对于辅助的基本思路,用超级模块比较容易,接下来就用CE去游戏搜索内存基址。
写程序代码
.版本 2
.程序集 基址更新
.子程序 基地址初始化
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP过程加密开始
DIRECT = 十六到十 (“7240B0”)
玩家数组 = 十六到十 (“19B5204”)
数组大小 = 十六到十 (“448”)
本人ID = 十六到十 (“64E8”)
FOV = 十六到十 (“26906f8”)
模式基址 = 十六到十 (“19B2748”)
是否为生化 = 十六到十 (“347E8”)
dx_pos = 十六到十 (“71E674”)
本人偏移 = 十六到十 (“70”)
鼠标Y偏移 = 十六到十 (“360”)
鼠标Y偏移_j = 十六到十 (“ABC”)
OBJECT = 十六到十 (“64F0”)
xpdx = 十六到十 (“714848”)
xp01 = 十六到十 (“1B0”)
xp02 = 十六到十 (“89501024”)
xp03 = 十六到十 (“44”)
v_解密1 = 十六到十 (“53ECFF0”)
v_解密2 = 十六到十 (“50DC430”)
w_hook = 十六到十 (“5421864”)
自瞄检测 = 十六到十 (“53EAA48”)
自瞄检测1 = 十六到十 (“53EB098”)
' -------------------
线程 = 十六到十 (“300EB00”)
游戏检测线程 = 十六到十 (“4042e21”)
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 })
.版本 2
.程序集 辅助界面
.程序集变量 old_, 整数型
.程序集变量 本人的数据, 本人数据
.程序集变量 aac, 整数型
.程序集变量 文本行距, 整数型
.程序集变量 方框, 坐标XX
.程序集变量 字体, 坐标XX
.程序集变量 键速, 整数型
.程序集变量 选中, 整数型
.程序集变量 文本变量, 文本型, , "50"
.子程序 DLL是否加载, 逻辑型
.局部变量 a, 整数型
.局部变量 挂接, 整数型
.局部变量 b, 整数型
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP过程加密开始
.判断循环首 (a < 1000)
a = get_old ()
Sleep (2000)
b = b + 1
.如果真 (b > 10)
返回 (假)
.如果真结束
.判断循环尾 ()
内存操作f.修改内存属性 (a, 64, 4)
old_ = 读_DWORD2 (a)
显示菜单 = 真
写_DWORD2 (a, 取子程序真实地址_f (&my_地址))
返回 (真)
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP过程加密结束
.子程序 刷新变量文本
区域内瞄准 ()
.判断开始 (新自瞄位置 = 6)
瞄准位置 = “头部”
.判断 (新自瞄位置 = 5)
瞄准位置 = “胸部”
.判断 (新自瞄位置 = 4)
瞄准位置 = “上腰”
.判断 (新自瞄位置 = 3)
瞄准位置 = “中腰”
.判断 (新自瞄位置 = 2)
瞄准位置 = “屁股”
.默认
.判断结束
.判断开始 (瞄准范围 = 0)
范围文本 = “零度”
.判断 (瞄准范围 = 2)
范围文本 = “超大”
.判断 (瞄准范围 = 4)
范围文本 = “中型”
.判断 (瞄准范围 = 8)
范围文本 = “小型”
.判断 (瞄准范围 = 16)
范围文本 = “微型”
.默认
.判断结束
.子程序 get_old, 整数型, , D3Djiekou
.局部变量 a, 整数型
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP过程加密开始
a = 读_DWORD2 (DIRECT)
.如果真 (a > 1000)
a = 读_DWORD2 (a)
.如果真 (a > 1000)
.如果 (读_DWORD2 (a + 十六到十 (“2a20”)) < 1000)
a = 读_DWORD2 (a + 十六到十 (“2ac0”))
.否则
a = 读_DWORD2 (a + 十六到十 (“2a20”))
.如果结束
.如果真 (a > 1000)
.如果真 (a > 1000)
a = 读_DWORD2 (a)
.如果真 (a > 1000)
a = a + 十六到十 (“4c”)
返回 (a)
.如果真结束
.如果真结束
.如果真结束
.如果真结束
.如果真结束
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP过程加密结束
返回 (0)
.子程序 汇编取变量_DECLARE_INTERFACE_, 整数型
.参数 a, DECLARE_INTERFACE_, 参考
置入代码 ({ 93, 139, 68, 36, 4, 194, 4, 0 })
返回 (0)
.子程序 my_地址, 整数型
.参数 a, 整数型
.局部变量 ss, 整数型
置入代码 ({ 137, 77, 252 })
置入代码 ({ 96 })
小转移 (ss)
置入代码 ({ 97 })
返回 (call_1 (old_, a))
.子程序 变量初始化, , , -
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP过程加密开始
文本变量 [1] = “ 敌人方框 ”
文本变量 [2] = “ 队友方框 ”
文本变量 [3] = “ 瞄准模式 ”
文本变量 [4] = “ 瞄准位置 ”
文本变量 [5] = “ 瞄准范围 ”
文本变量 [6] = “ ↓变态类↓ ”
文本变量 [7] = “ 显示名称 ”
文本变量 [8] = “ 显示 Q Q ”
文本变量 [9] = “ 显示准星 ”
文本变量 [10] = “ 显示血量 ”
文本变量 [11] = “ 智能瞄准 ”
文本变量 [12] = “ 右键自瞄 ”
文本变量 [13] = “ 无后坐力 ”
文本变量 [14] = “ 子弹穿墙 ”
文本变量 [15] = “ 零秒换弹 ”
文本变量 [16] = “ ↓人物透视↓ ”
文本变量 [17] = “ 内存透视 ”
文本变量 [18] = “ 人物加亮 ”
文本变量 [39] = “ 【One 游戏插件】 ”
文本变量 [40] = “◆___________◆”
文本变量 [41] = “ F9键 切换瞄准头\胸”
文本变量 [42] = “F12键 菜单显示\关闭”
文本变量 [43] = “↑↓选择←→开启”
' ==============================================颜色
橙色 = D3DCOLOR_ARGB (255, 255, 128, 0)
深粉红 = D3DCOLOR_ARGB (255, 255, 0, 0)
白色 = D3DCOLOR_ARGB (255, 255, 255, 255)
灯光粉红 = D3DCOLOR_ARGB (255, 255, 182, 193)
橘红 = D3DCOLOR_ARGB (255, 255, 0, 143)
芙红 = D3DCOLOR_ARGB (255, 255, 128, 192)
绿色 = D3DCOLOR_ARGB (255, 0, 255, 0)
蓝色 = D3DCOLOR_ARGB (255, 0, 0, 255)
石板蓝 = D3DCOLOR_ARGB (255, 30, 144, 255)
黄色 = D3DCOLOR_ARGB (255, 255, 255, 0)
暗紫色 = D3DCOLOR_ARGB (255, 218, 112, 214)
幽灵白 = D3DCOLOR_ARGB (255, 248, 248, 255)
' ==============================================颜色
选中 = 1
文本行距 = 20
方框.X = 5
方框.Y = 5
方框.Z = 350
字体.X = 12
字体.Y = 3
字体.Z = 20
字体.zs = 10
全局菜单开 = 绿色
全局菜单关 = 幽灵白
免疫手雷关 = 绿色
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP过程加密结束
.子程序 小转移, , , -
.参数 a, 整数型
pd = 读_DWORD2 (汇编加法 (a, 32))
写_DWORD2 (汇编取变量_DECLARE_INTERFACE_ (pDevice.IDirect3DDevice9), 读_DWORD2 (pd))
GetViewport_UP (pd)
.如果 (显示菜单)
绘制文本_D (pd, 文本变量 [39], 20, 字体.Y + 0 × 字体.Z + 字体.zs, 黄色, 15)
绘制文本_D (pd, 文本变量 [39], 20 + 1, 字体.Y + 0 × 字体.Z + 字体.zs, 黄色, 15)
绘制文本_D (pd, 文本变量 [1] + 选择 (敌人方框, “开启”, “关闭”), 字体.X, 字体.Y + 2 × 字体.Z, 选择 (敌人方框, 石板蓝, 全局菜单关), 15)
绘制文本_D (pd, 文本变量 [1] + 选择 (敌人方框, “开启”, “关闭”), 字体.X + 1, 字体.Y + 2 × 字体.Z, 选择 (敌人方框, 石板蓝, 全局菜单关), 15)
绘制文本_D (pd, 文本变量 [2] + 选择 (队友方框, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 1) × 字体.Z, 选择 (队友方框, 全局菜单开, 全局菜单关), 15)
绘制文本_D (pd, 文本变量 [2] + 选择 (队友方框, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 1) × 字体.Z, 选择 (队友方框, 全局菜单开, 全局菜单关), 15)
绘制文本_D (pd, 文本变量 [3] + 选择 (智能瞄准, “禁用”, 选择 (磁性自瞄开关 = 0, “F 动”, “磁性”)), 字体.X, 字体.Y + (2 + 2) × 字体.Z, 全局菜单开, 18)
绘制文本_D (pd, 文本变量 [3] + 选择 (智能瞄准, “禁用”, 选择 (磁性自瞄开关 = 0, “F 动”, “磁性”)), 字体.X + 1, 字体.Y + (2 + 2) × 字体.Z, 全局菜单开, 18)
绘制文本_D (pd, 文本变量 [4] + 瞄准位置, 字体.X, 字体.Y + (2 + 3) × 字体.Z, 全局菜单关, 18)
绘制文本_D (pd, 文本变量 [4] + 瞄准位置, 字体.X + 1, 字体.Y + (2 + 3) × 字体.Z, 全局菜单关, 18)
绘制文本_D (pd, 文本变量 [5] + 范围文本, 字体.X, 字体.Y + (2 + 4) × 字体.Z, 全局菜单关, 18)
绘制文本_D (pd, 文本变量 [5] + 范围文本, 字体.X + 1, 字体.Y + (2 + 4) × 字体.Z, 全局菜单关, 18)
绘制文本_D (pd, 文本变量 [6] + 敌人颜色, 字体.X, 字体.Y + (2 + 5) × 字体.Z, 黄色, 18)
绘制文本_D (pd, 文本变量 [6] + 敌人颜色, 字体.X + 1, 字体.Y + (2 + 5) × 字体.Z, 黄色, 18)
' 绘制文本_D (pd, 文本变量 [6] + 选择 (显示范围, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 5) × 字体.Z, 选择 (显示范围, 全局菜单开, 全局菜单关), 18)
' 绘制文本_D (pd, 文本变量 [6] + 选择 (显示范围, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 5) × 字体.Z, 选择 (显示范围, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [7] + 选择 (显示名字, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 6) × 字体.Z, 选择 (显示名字, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [7] + 选择 (显示名字, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 6) × 字体.Z, 选择 (显示名字, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [8] + 选择 (显示QQ, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 7) × 字体.Z, 选择 (显示QQ, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [8] + 选择 (显示QQ, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 7) × 字体.Z, 选择 (显示QQ, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [9] + 选择 (显示准星, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 8) × 字体.Z, 选择 (显示准星, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [9] + 选择 (显示准星, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 8) × 字体.Z, 选择 (显示准星, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [10] + 选择 (显示血量, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 9) × 字体.Z, 选择 (显示血量, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [10] + 选择 (显示血量, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 9) × 字体.Z, 选择 (显示血量, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [11] + 选择 (磁性自瞄开关 = 1, “禁用”, 选择 (智能瞄准, “开启”, “关闭”)), 字体.X, 字体.Y + (2 + 10) × 字体.Z, 选择 (智能瞄准, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [11] + 选择 (磁性自瞄开关 = 1, “禁用”, 选择 (智能瞄准, “开启”, “关闭”)), 字体.X + 1, 字体.Y + (2 + 10) × 字体.Z, 选择 (智能瞄准, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [12] + 选择 (右键自瞄状态 = 真, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 11) × 字体.Z, 选择 (右键自瞄状态, 石板蓝, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [12] + 选择 (右键自瞄状态 = 真, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 11) × 字体.Z, 选择 (右键自瞄状态, 石板蓝, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [13] + 选择 (无后坐力, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 12) × 字体.Z, 选择 (无后坐力, 暗紫色, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [13] + 选择 (无后坐力, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 12) × 字体.Z, 选择 (无后坐力, 暗紫色, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [14] + 选择 (子弹穿墙, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 13) × 字体.Z, 选择 (子弹穿墙, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [14] + 选择 (子弹穿墙, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 13) × 字体.Z, 选择 (子弹穿墙, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [15] + 选择 (零秒换弹, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 14) × 字体.Z, 选择 (零秒换弹, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [15] + 选择 (零秒换弹, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 14) × 字体.Z, 选择 (零秒换弹, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [16], 字体.X, 字体.Y + (2 + 15) × 字体.Z, 灯光粉红, 18)
绘制文本_D (pd, 文本变量 [16], 字体.X + 1, 字体.Y + (2 + 15) × 字体.Z, 灯光粉红, 18)
绘制文本_D (pd, 文本变量 [17] + 选择 (内存透视, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 16) × 字体.Z, 选择 (内存透视, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [17] + 选择 (内存透视, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 16) × 字体.Z, 选择 (内存透视, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [18] + 选择 (人物加亮, “开启”, “关闭”), 字体.X, 字体.Y + (2 + 17) × 字体.Z, 选择 (人物加亮, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [18] + 选择 (人物加亮, “开启”, “关闭”), 字体.X + 1, 字体.Y + (2 + 17) × 字体.Z, 选择 (人物加亮, 全局菜单开, 全局菜单关), 18)
绘制文本_D (pd, 文本变量 [41], 字体.X, 字体.Y + (2 + 32) × 字体.Z, 灯光粉红, 18)
绘制文本_D (pd, 文本变量 [41], 字体.X + 1, 字体.Y + (2 + 32) × 字体.Z, 灯光粉红, 18)
绘制文本_D (pd, 文本变量 [42], 字体.X, 字体.Y + (2 + 33) × 字体.Z, 橙色, 18)
绘制文本_D (pd, 文本变量 [42], 字体.X + 1, 字体.Y + (2 + 33) × 字体.Z, 橙色, 18)
绘制文本_D (pd, 文本变量 [43], 字体.X, 字体.Y + (2 + 34) × 字体.Z, 芙红, 18)
绘制文本_D (pd, 文本变量 [43], 字体.X + 1, 字体.Y + (2 + 34) × 字体.Z, 芙红, 18)
绘制文本_D (pd, 文本变量 [40], 12, 字体.Y + (1 + 选中) × 字体.Z, 蓝色, 18)
绘制文本_D (pd, 文本变量 [40], 12 + 1, 字体.Y + (1 + 选中) × 字体.Z, 蓝色, 18)
.否则
.如果结束
键速 = 键速 + 1
.如果真 (键速 > 50)
键速 = 0
.如果真 (MY_GetAsyncKeyState (#F9键) ≠ 0)
.如果真结束
.如果真 (MY_GetAsyncKeyState (#F12键) ≠ 0)
显示菜单 = 取反 (显示菜单)
.如果真结束
.如果真 (MY_GetAsyncKeyState (#上光标键) ≠ 0 且 选中 > 1)
选中 = 选中 - 1
.如果真结束
.如果真 (MY_GetAsyncKeyState (#下光标键) ≠ 0 且 选中 < 18)
选中 = 选中 + 1
.如果真结束
.如果真 (MY_GetAsyncKeyState (#F键) ≠ 0)
.如果真 (磁性自瞄开关 = 0 或 智能瞄准 = 假)
锁定敌人 ()
.如果真结束
.如果真 (智能瞄准)
自瞄_解锁 ()
.如果真结束
.如果真结束
由于太多显示不出来所以不给多了
如果楼主实在看不懂的话可以加我 ( 314 . 2729 . 700)咨询哦
‘伍’ 如何写计时器
除非你有个服务或者内核驱动的东西在一直运行,因为他的系统时间已经不可靠了,随时可以修改,你只能在安装或者说第一次运行的时候启动你的服务,你的这个服务利用timer开始计时,但是即使这样人家关机了貌似也要中断了。重启后还是得从主板拿去时间。
安装的时候记录系统时间比如 firsttime=2011-9-22 14:23:32
开始自己计时 timer设置1分钟一次吧 统计count 这样当前时间就是 firsttime+Count
这个驱动程序是一直在运行的 这个是前提,如果人家会停掉你的驱动就没有办法了,然后考虑人家关机的问题,在关机之前 比较你的时间 和系统的时间的误差,记录下来,开机的时候自动启动你的服务 用开机时间加上误差时间 ,这样哪怕人家修改时间 也不怕 ,因为关机那一瞬间的时候你记录了系统时间 ,再到开机的那一瞬间的时间 你读出去主板的时间,只要保证在人家不在你保存后通过程序去修改,那么人家想修改就只能从硬件入手了。
很多问题 ,不能保证人家不去掉你的驱动,办法就是去掉了 就让人家不能用
不保证人家不hook你驱动的函数进行伪装返回,这个加密,但是人家照样能破解你加密程序。
不保证人家在你的驱动保存时间过后同样写个驱动修改时间
不保证人家不会直接修改主板时间,这个很容易,bois里面可以修改的,还有就是人家机箱电池也可以拔掉的
这些都能让你得不到关机过后-再次开机之间的 时间差 如果得不到这个 你也得不到正确的时间。
单机的程序验证天数一般效果都不是很好的。可能做使用次数更好点!30天就当30次咯,就当人家一天一次,除非人家开了电脑不关,或者一直休眠/睡眠模式关机,那你软件那么吃香了,直接多投入些成本搞U盾之类的都划算了。 这个次数你可以保存在注册表或者文件数据库中,进行加密,加密代码披上vmp,如果人家会反汇编破解你的加密程序,而且会破解vmp的话那就没话说了,因为针对高级破解人员,即使你联网的,怎么防都可能不起作用,除非不提供给人家!
‘陆’ 易语言写程序如何防破解
打乱ascii字符串,让od无法辨别出明文字符串防止被od跟踪
关键数据代码用ras或des等加密算法加密,等用到时在解密
crc32或md5取校验数据值,数据被改动这crc32和md5也会变动
变量验证或循环冗余验证,发现破解不要立即结束程序,让他跟一段在结束(例如:延时)
检查程序函数是否被hook(防止利用关键函数破解),模块是否正常(防止程序被劫持)
利用内存crc校验程序代码段,发现代码被修改立刻结束或标记。
使用高强度加密壳来vm关键代码,比如:se、vmp、vp、tmd、enigma等等
易语言防破解方法多不胜数,关键还是思路和技术,思路到了没技术也是写不出代码的!
‘柒’ 怎么脱E语言程序的VMP壳
想要脱VMP的壳,首要工作当然是要找一个强OD。至于是什么版本的OD自己多试验几个,网上有很多,一般来说只要加载了你想脱的VMP加壳程序不关闭都可以。
其次,就是StrongOD.dll这个插件了,现在用的比较多的就是海风月影。下载回来后复制到你的OD程序所在的文件夹里面的plugin里。StrongOD的设置选项搞不懂就全部打钩。
接下来要做的工作就是搞清楚我们要脱壳的程序编程的语言了,可以用PEID或者fastscanner查看,如果在这里看不到也可以在OD载入以后通过里面的字符串判断了。例如VB的程序会出现MSVB----/VC的会出现MSVC---等等。这些都是程序运行所需要的windows链接文件。
做完这些预备工作接下来当然是用OD载入文件。文件载入后在反汇编窗口CTRL+G搜索VirtualProtect(注意V跟P要大写,至于为什么要搜索这个别问我)。一般来说搜索的结果会出现以下的类似:
7C801AE3 E8 75FFFFFF call kernel32.VirtualProtectEx
我们在这里下F2断点。然后F9运行到我们下的这个断点。接下来我们就要注意观察堆栈窗口了。一般来说当我们F9运行到我们上面下的断点的时候在堆栈窗口会出现以下类似:
0012F66C 00401000|Address = TradeCen.00401000
0012F670 000280D1|Size = 280D1 (164049.)
0012F674 00000004|NewProtect = PAGE_READWRITE
0012F678 0012FF98pOldProtect = 0012FF98
我们要注意观察的就是在接下来我们F9运行的时候,ADDRESS和NEWPROTECT这两行的变化。按F9-速度别太快,直到NewProtect项变为PAGE_READONLY,这时候程序就释放完毕了。
0012F66C 0042A000|Address = TradeCen.0042A000
0012F670 000069DE|Size = 69DE (27102.)
0012F674 00000002|NewProtect = PAGE_READONLY
0012F678 0012FF98pOldProtect = 0012FF98
现在可以取消刚才我们下的断点了。接下来就是找OEP了。找OEP的时候我个人的一个经验就是OEP一般就在接近上面的ADDRESS地址的附近。例如上面的地址是0042A000,我一般就在这个基础上减到420000搜索程序的特征段,当然我们也可以直接跳到401000开始搜索。虽然我们搜索的范围比较大,但是因为我们搜索的是命令序列,所以工作量还不是很大。
CTRL+G--上面的地址,然后CTRL+S 查找命令序列。命令序列的内容就是我们用查到的编程语言的特征段。我们可以在特征段里面选择两三句固定不变的命令查找。例如VC++6.0的特征段是:
0046C07B U>55 push ebp
0046C07C 8BEC mov ebp,esp
0046C07E 6A FF push -1
0046C080 68 18064C00 push UltraSna.004C0618
0046C085 68 F8364700 push UltraSna.004736F8
0046C08A 64:A1 00000000 mov eax,dword ptr fs:[0]
0046C090 50 push eax
0046C091 64:8925 00000000mov dword ptr fs:[0],esp
0046C098 83EC 58 sub esp,58
0046C09B 53 push ebx
0046C09C 56 push esi
0046C09D 57 push edi
我们可以只搜索前三条命令。找到符合前三条命令的,我们在对照接下来的命令。只要命令相符那这个地址八九不离十就是OEP了。如果在ADDRESS地址附近找不到OEP,那就只好用笨办法,从401000开始找吧。
找到OEP地址后,我们在OEP处点鼠标右键《此处为新EIP》。接下来就可以mp啦。通常选择OD的mp插件脱壳要好点,用loadpe脱壳后要么程序不运行要么干脆没脱。用OD的mp插件脱壳的时候,脱壳窗口下面的(重建输入表)项前面的勾一定要去掉。
‘捌’ 易语言中有VMP过程加密开始和结束是什么我是用软件连接网站的管理端,那VPM的明文又是什么呢求解!
VMP的SDK代码可以加密软件运行流程,但软件里的明文是加密不了的,请问VMP有没有加密软件里面明文的SDK标记或函数呢,或用其它方式能快速加密明文也行,请大侠支招!...
‘玖’ VMP加壳程序在C语言编写的程序里怎么使用
VMP加壳程序是对执行文件加密的而不是对源码加密
你要将你的源码编译成exe可执行文件,然后再用VMP加壳的
‘拾’ Android最新的VMP加固技术一般是怎么实现的
Android APP二次打包”则是盗版正规Android APP,破解后植入恶意代码重新打包。不管从性能、用户体验、外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量、流量,恶意扣费、偷窥隐私等等行为。http://www.ijiami.cn/newsInfo?id=341
爱加密的加密保护是全方位的,目前提供的服务有:DEX加壳保护、DEX指令动态加载保护、高级混淆保护,SO库保护,主配置文件保护,资源文件保护,二次打包防护。爱加密的基础保护就包含对资源文件的加固保护,通过混淆代码的方式,可以阻止打包党读取资源文件的信息。此外,一个APK的唯一正版识别是通过包名+签名共同的方式来判断。