正式版

Similar documents
標準 BIG 中文字型碼表 A 0 9 B C D E F 一 乙 丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 三 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千 叉 口 土 士 夕 大 女 子 孑 孓 寸 小 尢 尸 山 川 工 己 已 巳 巾 干 廾


untitled

Visualize CMap

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

4 / ( / / 5 / / ( / 6 ( / / / 3 ( 4 ( ( 2

untitled

民 國 105 年 大 專 程 度 義 務 役 預 備 軍 官 預 備 士 官 考 選 簡 章 目 錄 壹 考 選 依 據 1 貳 考 ( 甄 ) 選 對 象 1 參 資 格 規 定 1 肆 員 額 及 專 長 類 別 2 伍 報 名 及 選 填 志 願 日 期 方 式 3 陸 選 填 官 科 (

第一次段考 二年級社會領域試題 郭玉華 (A)(B) (C)(D)

SIK) 者, 需 實 施 1 年 以 上, 經 體 格 檢 查 無 後 遺 症 者 5. 身 體 任 何 部 分 有 刺 青 紋 身 穿 耳 洞 者, 不 得 報 考, 各 項 檢 查 結 果 須 符 合 體 位 區 分 標 準 常 備 役 體 位 二 在 校 軍 訓 成 績 總 平 均 70 分

农银人寿发[2013]102号-4 农银寰宇至尊高端医疗保险条款

(A)3 4 (B)5 6 (C)7 9 (D)10 2 (E) (A) (B) (C) (D) (E) ( ) ( ) ( ) (A) (B) (C) (D) (E) (A) (B) (C) (D) (E). (A) (B) (C) (D) (E). (A) (B) (C) (D) (



民國八十九年台灣地區在校學生性知識、態度與行為研究調查

untitled

2

Ctpu

!"#$!"%&!"$!""( )( )( #( "#*!&#) %&*!(+,- %.!/( )( #( ,-2 89 /

Ps22Pdf

数 学 高 分 的 展 望 一 管 理 类 联 考 分 析 第 一 篇 大 纲 解 析 篇 编 写 : 孙 华 明 1 综 合 能 力 考 试 时 间 :014 年 1 月 4 日 上 午 8:30~11:30 分 值 分 配 : 数 学 :75 分 逻 辑 :60 分 作 文 :65 分 ; 总


!""# $!""%!"&" #

untitled

02所有分支机构的营业场所和电话.xls

種 類 左 淋 巴 總 管 ( 胸 管 ) 右 淋 巴 總 管 血 管 連 接 連 接 左 鎖 骨 下 靜 脈 連 接 右 鎖 骨 下 靜 脈 淋 巴 收 集 範 圍 左 上 半 身 及 下 半 身 淋 巴 液 右 上 半 身 淋 巴 液 長 度 很 長 很 短 (3) 循 環 路 徑 : (4)

# " $ % $ # ( $ $ %% * $ %+ $, -., / ", 0, %, %%%%, " % 2 %% #. $ 3 *3 %45 6" %% 9: :" : "

<4D F736F F D20C1E3B5E3CFC2D4D8C4A3B0E52E646F63>

. (A) (B) (C) A (D) (E). (A)(B)(C)(D)(E) A

untitled

(E). (A) (B) (C) (D) (E). (A) (B) (C) (D) (E) (A) (B) (C) (D) (E) (A) (B) (C) (D). ( ) ( ) ( ) ( ) ( ) ( ) (A) (B) (C) (D) (E). (A) (B) (C) (D) (E). (

工 序 的 是 ( ) A. 卷 筒 切 筒 装 药 造 粒 B. 搬 运 造 粒 切 引 装 药 C. 造 粒 切 引 包 装 检 验 D. 切 引 包 装 检 验 运 输 7. 甲 公 司 将 其 实 施 工 项 目 发 包 给 乙 公 司, 乙 公 司 将 其 中 部 分 业 务 分 包 给

!" #$%#&#! () *+, -.!" #$%#/# $!" /$12 0!" 3 4 $$255 % 67 8 $ %% #! " # $9&$


!% &$ % (% )% &%!""* +% ($ % )% &%,% ($ % )% &% ) *% ($ ( #% )$ % (% &% ( -% ($.% ($ ( ) & /. /!""*! $!"



!!""# $ %#" & $$ % $()! *% $!*% +,-. / 0 %%"#" 0 $%1 0 * $! $#)2 "

!!!!"#$ " " %& ( " # " " " " " "$%%& " $%% " "!!

1 CPU interrupt INT trap CPU exception

WCA Regulations and Guidelines

高二立體幾何

E. (A) (B) (C) (D). () () () (A) (B) (C) (D) (E). () () () (A) (B) (C) (D) (E). (A)(B)(C) (D) (E) (A) (B) (C) (D) (E) (A) (B)(C) (D) (E). (A) (B) (C)

Linux kernel exploit研究和探索

例 009 年高考 全国卷Ⅱ 理 8 如 图 直 三 棱 柱 ABC ABC 中 AB AC D E 分 别为 AA BC 的中点 DE 平面 BCC 证明 AB AC 设二面角 A BD C 为 0o 求 BC 与平面 BCD 所 成角的大小 图 - 略 证明 以 D 为坐标原点 DA DC DD

※※※※※

! " # $ % & (( %) "*+,- &.(/-) & ( 0 & 1! % " % # % & & $ % "/()%!"# (( (02-03 /(((.1/.2( 4 //). /$0 3)0%. /1/%-2 (( ) / ((0 // "*+,- &.(/-) & ( 0 & 1

实 信 用 的 原 则 " 其 中, 诚 实 信 用 原 则 是 指 民 事 主 体 进 行 民 事 活 动 时, 均 应 诚 实, 不 作 假, 不 欺 诈, 不 损 害 他 人 利 益 和 社 会 利 益, 正 当 地 行 使 权 利 和 履 行 义 务 甲 将 平 房 售 与 丙 而 未 告

zt

Microsoft Word - 烘焙食品乙級第二部份 doc

CIP. / ISBN Ⅰ.... Ⅱ.... Ⅲ. Ⅳ. G CIP http / /press. nju. edu. cn


但 洋 糖 最 终 乘 船 溯 江 而 上, 再 加 上 民 国 初 年 至 抗 战 前 夕 二 十 余 年 间, 四 川 接 连 不 断 遭 受 水 灾 旱 灾 地 震, 平 均 每 月 爆 发 两 次 军 阀 混 战, 乡 村 遭 受 极 大 破 坏,( 赵 泉 民,2007) 农 村 经 济

!!"#$ " # " " " " " "$%%& " $%% " "!!

tbjx0048ZW.PDF

zt

校园之星

恶意代码分析技术及相关工具 郑辉 清华大学网络中心 CERNET Computer Emergency Response Team

E170C2.PDF

科別

!!! "!! # " $ % & % & " &"($

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! "!!!!!!!!!!!!!!!!!!!!!!!!!!!! #! $%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! "%!!!!!!!!!!!!!

!"!"# # $!""%& ()*+, - ". - "/!%,0 -.! $ " $ # $ $ $ 1 %%&0/! 2(3!""% "/%,.4 "/" -." "" - 5/" - "045 /"""" # # 999$ 6:8$ :;<$ =>

4 & & & 5+)6,+6 5+)6,+6 7)8 *(9 ):*");, +!*((6,<6 #!;";<=*#!8 > #)+9 " =68 )(( 8"=*");,8 >?=*%),<8 > 6B#(*,*9 ";=C <=*#!)+8 ),"6=*+")D6

<4D F736F F D F F315FAAFEA5F333AAF9B645C2E5C0F8AA41B0C8C249BCC6B24DB3E6B443C5E9A5D3B3F8AEE6A6A12E646F63>

Ps22Pdf

! "# $! ""# %& %! ($)& ($*$ + "# &*, ""# & &! ) *! $ "#! (- ((! %-,- %- $- %

1 住 房 保 障 10BA 住 房 保 障 索 引 号 : / 主 题 名 称 : 住 房 保 障 发 文 单 位 : 中 华 人 民 共 和 国 住 房 和 城 乡 建 发 文 日 期 : , 中 华 人 民 共 和 国 民 政 部, 中

比 賽 表 Competition Schedule 報 到 : 比 賽 開 始 前 15 分 鐘 Reporting : 15 minutes before the scheduled time for the match 各 參 賽 隊 伍 必 須 依 照 大 會 編 定 的 出 場 比 賽,

Microsoft Word - n doc



目錄

zt

" "##$ """ $ $%%& %& ()(*(+,& " - - # -./ % # - - $( +?5 - %( +?5 ;&77&12 0 # -01,( 2+0 1% ( ) &) 3 $, -01,( 2+0 "##$ %4# %

zt

钢铁金相图谱

Microsoft Word - NHIS2013_C_130716_送印_.doc

:;< =;< >!?%(, (-+ *$5(1 *$%* *#%0$#34 65&# *--.20$ $-.#+-317 A$#, 4%, 5* 54! >! B-3 0$5)/3#( * %* $-.# 5( *$#53 B3## *5.#7

! "! #$# +&#!! %& #!"# )*+ % #!"!!!"!! =1.>7? "$+"+ (!! &< =1.>7? % $%& $& ( )*+ $*& $(B *& ;; / %" ;; C% %( &&& 0, ;17 -#D" (D-"" B ( %&& 0

!"#$!%&!! (# )*&#!(!$!(!( )&** )&#*!%!!# )!"($!%!!($#!%*# + +,, &- +./ :: 43 ;<3=3 9<3 635=329 A: B< 732 C9 2 A529

今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单, 新加了个区段放病毒执行代码, 执行病毒代码, 最后跳回原入口点来执行原文件 下面就是感染后的代码的简单分析 : ; =============== S U B R O U T I N E =====================

8"8" 4$*% 5-* (. 6+$% 7+-+$% ("!""#!"#$% & ()#*+$%!""$ %!""#!""# &!""# $ $!!"!!"!"!!""" $ (!"!"#,%-&+&% %./+$%-# )*+,-./012* 3! 45667##8( "9 ":,012* $

2013年二级建造师考试市政工程真题答案解析


Ps22Pdf

10 t10 論 病 例 計 酬 案 件 申 請 件 數 11 t11 論 病 例 計 酬 案 件 日 數 12 t12 論 病 例 計 酬 案 件 醫 療 費 用 點 數 6 9 案 件 分 類 2( 論 病 例 計 酬 案 件 ) 之 申 請 件 數 加 總 8 9 案 件 分 類 2( 論 病

5( " &$"" & & #! # # # # # # # # # # $ % & &( )( # # # *+,-,.. /012 # # "" # 3 % # # # # # ) &$"4 # # # # # # # # # # # # &$"! # & # ""!

关 注 本 期 证 券 未 办 理 抵 押 权 转 让 变 更 登 记 本 期 证 券 发 起 机 构 转 让 信 托 财 产 时, 按 惯 例 并 未 办 理 抵 押 权 转 让 变 更 登 记, 而 由 委 托 人 在 有 管 辖 权 的 政 府 机 构 登 记 部 门 继 续 登 记 为 名

. (B) (C) (D) (E). ( ) ( ) ( ) ( ) ( ) X Y (A) (B) (C) (D) (E) X Y X Y (A) (B) (C) (D) (E). (A) (B) (C) (D) (1) (2) (3). (A) (B) (C) (D) (E) (A) (B) (

第02章 常用统计图的绘制.doc

zt

+00DE _01EN.book

99710a72ZW.PDF

箫.doc

2.181% 0.005%0.002%0.005% 2,160 74,180, ,000, ,500,000 1,000,000 1,000,000 1,000,000 2

漏 洞 攻 防 EXPLOIT ATTACK & DEFENCE 栏 目 编 辑 脚 本 小 子 scriptsboy@hacker.com.cn HEAD 部 分 大 小 当 然 也 就 是 固 定 的 18200H 如 果 要 提 取 出 HEAD, 我 们 可 以 选 中 前 18200H 字

#$%# & (! )! *! +! +! &! +!! * &! * )!! +, )! + &)!) $! )!+ *! +. &) #!/ #! #$$% & #$$ & #0#1! ) * # #$$( &! ) * +,!

年 度 工 作 計 劃 目 錄 1 學 校 發 展 計 劃 至 2015 年 度 全 校 關 注 事 項 至 2014 年 度 學 校 關 注 事 項 年 度 九 龍 倉 集 團 學 校 起 動 計

导言

Transcription:

VMSweeper 分析 一. 基本使用 最近, 有一位牛人发布了一个比较有意思的插件, 我们一起看一下其中一些好玩的东西 既然有大牛放血, 那我就顺便给没有追踪 VM 的同学扫扫盲 ( 本文对应插件更新至 VMSweeper1.4 beta 8) 由于我并没有源码, 很多东西都是靠猜了, 如果有什么地方说的不对, 请各位多多指教 这个插件的下载地址是 http://forum.exetools.com/showthread.php?t=13084 这个插件有些东西还没有完善, 因此经常会出错, 我运行了几个程序, 都没有一个能正常运行完的, 不过这并不阻碍我们了解程序的 体思想 在看这篇无聊的文章之前首先你要明白 VMProtect 的基本架构, 因为追踪和还原 VM 有一部分是和 VM 的架构相关的 安装后打开一个 VMP 加密的程序, 然后点击 VMSweeper 首先要选 Analyze all VM references 接着填写相关的参数, 这里的 Code start 和 Code end 指定代码段的起始和结束 VM start 和 VM end 指定 vm 段的起始和结束, 还有一个要注意的是要把区段名改为 VM 为什么要填这些参数呢, 我在 VMProtect 逆向分析 里讲过了, 因为入口的指令特征被抹除掉了, 目前比较好的识别入口算法是查找 Code 段的所有 JMP 指令, 然后检查是否 JMP 到 VM 段内, 再做一些特征的校验 ( 陷阱校验 ) 还有一个就是判断 VM 内部数据和退出 VM 的识别, 这些都需要 VM 段的界限 填写好了之后, 会列出 VM 的入口新版的 VMSweeper 已经自动获取段界限, 不用手动输入了 1

接着就可以 Decode VM 了, 这时看到在 VM 的入口下了一个断点, 当断点命中的时候按 F1 进行分析 进行分析后弹出一个框后要求重新打开程序, 这里正常的话应该是重启, 然后进行 patch 二. 初始化状态 重新打开程序, 我们来看一下刚刚 VMSweeper 做了些什么 打开 OD 的目录, 你会发现多了一个以程序名称命名的目录, 打开它, 会看到一些文件 2

这些文件都是干什么的呢, 我们一个一个来看 Regs_xxxxxxx Stack_xxxxxxx 很明显, 文件名已经提示是寄存器和堆栈了, 那么到底是什么寄存器和堆栈呢, 我没有插件的源代码, 就只能猜了, 如果没有猜错的话个应该是保存插件内部虚拟机的状态 Regs_00405D1E.map: eax: eax << (ecx << ecx) ecx: (ecx << ecx) - 1 edx: edx ebx: 0x00407C27 esp: 0x0012FEE4 ebp: 0x0012FFA4 esi: [0x0012FFA4] + 0x00407C27 edi: 0x0012FEE4 efl: efl 首先看地址 00405D1E 3

这里记录的主要有用的是 ESI(VMP 目前版本的 EIP) 的初始化值 这里记录 EAX 和 ECX 不知道是不是作者搞错了其它的 VM,VMP 在入口 EAX 和 ECX 并没有什么用, 这里还有一个比较有 用的是 EBX 的校验算法, 不过这里并没有记录 这里应该追踪的是 ADD ESI,DWORD PTR SS:[EBP] 指令 接下来看 Stack_00405D1E.map: 0012FF94: empty 0012FF98: empty 0012FF9C: empty 0012FFA0: empty 0012FFA4: 0 0012FFA8: [0x0040616B] 0012FFAC: efl 0012FFB0: ebp 0012FFB4: ecx 0012FFB8: ebx 0012FFBC: esi 0012FFC0: edx 0012FFC4: edi 0012FFC8: ebx 0012FFCC: eax 0012FFD0: 0x991AD4CC 0012FFD4: 0x0101A0F0 0012FFD8: var0 0012FFDC: var1 0012FFE0: var2 0012FFE4: var3 0012FFE8: var4 0012FFEC: var5 0012FFF0: var6 0012FFF4: var7 0012FFF8: var8 0012FFFC: var9 上面还有一个问题, 就是堆栈的地址不对, 导致 ESP,EBP,EDI 的数值错误, 在这个测试程序里没有什么影响, 因为 VM 4 很明显, 这里是虚拟机对堆栈的标签 这里主要追踪的是入口数据 的代码没有访问参数, 真正的堆栈是这样的 0013FFA0 0013FFB0?. 0013FFA4 7FFDD000. 旋 0013FFA8 FFFFFFFF 0013FFAC 7C92E514 鍜 ntdll.kifastsystemcallret 0013FFB0 7C930228 ( 搢 ntdll.7c930228 0013FFB4 7FFDD000. 旋 0013FFB8 00000000...

0013FFBC 991AD4CC 淘 这里估计是 VMSweeper 内部的 VM 指令模拟错误 这个问题好久都没有修正 -_- 接下来看 Regs_00405F91.map 和 Regs_00405D1E.map 地址 00405F91 指令执行的开始 (00405F91), 这里是追踪 VMP 必须记录的地方 很明显这里也是追踪 RETN XX 这条指令这里记录些什么呢 Regs_00405F91.map: eax: 0xA3 ecx: [404E69] ^ 0x3FE1E344 edx: edx ebx: 0x00407CCA esp: 0x0012FEE4 ebp: 0x0012FFA4 esi: 0x00407C26 edi: 0x0012FEE4 efl: efl 5

这里记录的是解密 handle 地址算法, 这里的 EAX 就是 handle 这个算法是必须获得的, 因为要用这个算法来获得指令表保存的真正地址 在 VMP 里, 没有使用的指令是不会出现在指令表的,VMP 会用使用指令的副本进行填充, 在现阶段, 我们无法获知 VMP 将会调用哪些指令,VMSweeper 对所有的 handle 都进行了分析, 这个架构对目前的版本的 VMP 是没有问题的, 但是对某些用陷阱地址填充的 VM 或者未来版本 VMP 也使用陷阱地址的话, 就考验 VMSweeper 的容错和启发式了, 个人觉得运行时分析对付这些小花招会好一点 其实用 VM 来追踪 VM 并不是什么新鲜的东西, 有时甚至会用一个以上的 VM 来进行追踪, 保存 VM 某个时间的现场和记录运行轨迹也是必须的, 这样可以方便调试 接下来 405D1E.trc 和 404BDD.trc, 这两个文件保存了 VMSweeper 内部虚拟机的执行轨迹, 这里也没有什么讲的 Compile ASSIGN (0, 2) Compile ASSIGN (3, 4) Compile ASSIGN (5, 8) Compile ASSIGN (9, 10) Compile ASSIGN (11, 13) Compile ASSIGN (14, 15) Compile ASSIGN (16, 19) Compile ASSIGN (20, 21) Compile ASSIGN (22, 23) ASSIGN 带两个参数, 第一个是汇编代码的起始位置 ( 总的大小 ), 第二个是执行轨迹前面的索引 接着看一个好东西,405D1E.log,405D1E 是指令表的地址, 这里记录的是 VMSweeper 指令收缩和模板生成流程 第一个模板对应 405D1E.trc 的指令轨迹, 生成的是函数地址解码模板, 其它的是函数模板对应 404BDD.trc 这里的信息太多了 ( 不知道 VMSweeper 后面的版本还会不会明文 ), 足够逆出整个 VMSweeper 的扫描架构了 这里说几句废话, 给没有写过解码器的童鞋扫扫盲, 据本菜鸟所知, 目前常用的扫描方法有三种 一种是最常见的特征码扫描, 这里的特征码主要指的是机器码, 这种扫描速度快, 精确度高, 但是对 VM 的话基本没有用了, 原因是 VM 每次生成的机器码都不一样 建议在写解码器时要尽可能远离机器码, 看看 VMP 的入口就知道了, 任何的机器码都有可能在下一个版本被抹掉 第二种是局部特征码, 也就是使用模板, 个人认为 VMSweeper 和 VMP 都使用这种方法, 一部分的代码在编译时动态生成通过逆出 VMP 的模板来生成相同的代码进行扫描 还有一种就是追踪数据流, 这种方法最理想的状态是不依赖任何的特征码 我们来一个 VMSweeper 指令模板 VMP_CRC: 这个指令的识别在 VMP 里应该是最难的了, 底层的解码器做得怎么样就看这条指令了 轨迹如下 6

收缩后形成一个匹配模板 0040504D: edx = [ebp] 00405057: ebp += 4 00405061: cmd -= cmd 00405068: ecx = cmd 004042C6: cmd <<= 7 0040557B: ecx >>= 0x00000019 00405588: cmd = ecx 00405E41: cmd ^= [edx] 00406667: [ebp] -= 1 00406150: [ebp] = cmd 7

*** Primitive Template *** { NN_mov, dt_dword, "edx", "[ebp]", R_SS }; { NN_add, dt_dword, "ebp", "4", R_NONE }; { NN_sub, dt_dword, "cmd", "cmd", R_NONE }; { NN_mov, dt_dword, "ecx", "cmd", R_NONE }; { NN_shl, dt_dword, "cmd", "7", R_NONE }; { NN_shr, dt_dword, "ecx", "0x00000019", R_NONE }; { NN_or, dt_dword, "cmd", "ecx", R_NONE }; { NN_xor, dt_byte, "cmd", "[edx]", R_DS }; { NN_sub, dt_dword, "[ebp]", "1", R_SS }; { NN_mov, dt_dword, "[ebp]", "cmd", R_SS }; 这个应该就是内部定义的匹配模板了, 参数也很简单 VM primitive 0B Crc VMSweeper 将一些特殊值进行了定义, 个人理解为可能考虑这些值在以后的版本会改变 cmd : 动态解码的数值 reg_cmd : VMP 内部寄存器数值 efl : eflags 还有一些有趣的寄存器大小转换, 这里就不说了 三. 伪代码追踪 在识别所有的 handle 后,VMSweeper 开始追踪伪代码, 其轨迹记录在 ( 入口 eip).trc 里, 这里的测试程序是 401000.trc 这里的花指令识别和指令收缩和底层的并没有什么不同 这个文件上半部分记录的是入口的轨迹, 从 ***** Start Virtual Machine ***** 开始记录 VMP 伪代码的轨迹 log 窗口显示的数据 00407C20 A9 pop dword ptr [reg_34] ;00000206 ;efl 00407C1F A9 pop dword ptr [reg_34] ;203D9563 ; $ret 00407C1E B1 pop dword ptr [reg_4] ;00000246 ;iefl 00407C1D A5 pop dword ptr [reg_2c] ;0012FFF0 ;iebp 00407C1C BB pop dword ptr [reg_10] ;0012FFB0 ;iecx 00407C1B A7 pop dword ptr [reg_28] ;7FFD9000 ;iebx 00407C1A BF pop dword ptr [reg_18] ;FFFFFFFF ;iesi 00407C19 B7 pop dword ptr [reg_8] ;7C92EB94 ;iedx 00407C18 AF pop dword ptr [reg_38] ;7C930738 ;iedi 00407C17 A1 pop dword ptr [reg_24] ;7FFD9000 ;iebx 00407C16 AD pop dword ptr [reg_3c] ;00000000 ;ieax 00407C15 BD pop dword ptr [reg_1c] ;991AD4CC ;0x991AD4CC 00407C14 B9 pop dword ptr [reg_14] ;0101A0F0 ;0x0101A0F0 再往下看 8

***** Stop Virtual Machine ***** Instr: 0 parsing - 0x00140040: push 0101A0F0h (aux:0x1808 insn:0x00) Instr: 1 parsing - 0x00140045: push 991AD4CCh (aux:0x1808 insn:0x00) Instr: 2 parsing - 0x0014004A: push eax (aux:0x1808 insn:0x00) Instr: 3 parsing - 0x0014004B: push ebx (aux:0x1808 insn:0x00) Instr: 4 parsing - 0x0014004C: push edi (aux:0x1808 insn:0x00) Instr: 5 parsing - 0x0014004D: push edx (aux:0x1808 insn:0x00) Instr: 6 parsing - 0x0014004E: push esi (aux:0x1808 insn:0x00) 这里记录的是伪代码的轨迹, 再下来是花指令识别的轨迹 然后就不正常了 Can't devirtualize line - svm_34 = and ~svm_22, 0x00000010 Can't devirtualize line - rvm_14 = shr svm_34, 0x04 Can't devirtualize line - svm_45 = and rvm_3c, 0x0F Not equal variable (0x0F - 00000001) in line - svm_45 = and rvm_3c, 0x0F 这里先不管它了 我们接下来看 401000.log VMSweeper 在运行时申请了一块内存, 我这里的是内存映射, 条目 5 地址 =00140000 大小 =00040000 (262144.) 属主 = 00140000 ( 自身 ) 区段 = 类型 =Priv 00021040 访问 =RWE 初始访问 =RWE 内存开始的 0x40 作为执行引擎的寄存器, 然后将 VMP 伪代码用汇编指令模拟 00140040: [0x00140020] = 0 00140064: svm_1 = add [0x0040616B], 0x203D9563 0014006D: [0x00140034] = iefl 00140074: [0x00140034] = svm_1 0014007A: [0x00140004] = iefl 00140080: [0x0014002C] = iebp 00140086: [0x00140010] = iecx 0014008C: [0x00140028] = iebx 00140092: [0x00140018] = iesi 00140098: [0x00140008] = iedx 0014009E: [0x00140038] = iedi 001400A4: [0x00140024] = iebx 001400AA: [0x0014003C] = ieax 001400B0: [0x0014001C] = 0x991AD4CC 001400B6: [0x00140014] = 0x0101A0F0 001400BC: svm_2 = add 0xB1B55788, 0x4E8AF8C5 9

001400CF: [0x00140014] = iefl 001400D6: svm_3 = add svm_2, [0x00140020] 001400E0: [0x0014001C] = iefl 001400E7: svm_4 = add 0x696F2C6D, [svm_3] 001400EE: [0x00140030] = iefl 001400F5: svm_5 = add 0x0000000A, $esp Patch 的指令是 00140040 68 F0A00101 PUSH 101A0F0 // 模拟入口 00140045 68 CCD41A99 PUSH 991AD4CC 0014004A 50 PUSH EAX 0014004B 53 PUSH EBX 0014004C 57 PUSH EDI 0014004D 52 PUSH EDX 0014004E 56 PUSH ESI 0014004F 53 PUSH EBX 00140050 51 PUSH ECX 00140051 55 PUSH EBP 00140052 9C PUSHFD 00140053 FF35 6B614000 PUSH DWORD PTR DS:[40616B] 00140059 68 00000000 PUSH 0 0014005E 8F05 20001400 POP DWORD PTR DS:[140020] 00140064 68 63953D20 PUSH 203D9563 00140069 58 POP EAX 0014006A 010424 ADD DWORD PTR SS:[ESP],EAX // 用堆栈来模拟运算 0014006D 9C PUSHFD 0014006E 8F05 34001400 POP DWORD PTR DS:[140034] 00140074 8F05 34001400 POP DWORD PTR DS:[140034] 0014007A 8F05 04001400 POP DWORD PTR DS:[140004] 00140080 8F05 2C001400 POP DWORD PTR DS:[14002C] 00140086 8F05 10001400 POP DWORD PTR DS:[140010] 0014008C 8F05 28001400 POP DWORD PTR DS:[140028] 00140092 8F05 18001400 POP DWORD PTR DS:[140018] 00140098 8F05 08001400 POP DWORD PTR DS:[140008] 0014009E 8F05 38001400 POP DWORD PTR DS:[140038] 001400A4 8F05 24001400 POP DWORD PTR DS:[140024] 001400AA 8F05 3C001400 POP DWORD PTR DS:[14003C] 001400B0 8F05 1C001400 POP DWORD PTR DS:[14001C] 001400B6 8F05 14001400 POP DWORD PTR DS:[140014] 001400BC 68 6D2C6F69 PUSH 696F2C6D 001400C1 68 8857B5B1 PUSH B1B55788 001400C6 68 C5F88A4E PUSH 4E8AF8C5 001400CB 58 POP EAX 001400CC 010424 ADD DWORD PTR SS:[ESP],EAX 10

001400CF 9C PUSHFD 001400D0 8F05 14001400 POP DWORD PTR DS:[140014] 001400D6 FF35 20001400 PUSH DWORD PTR DS:[140020] 001400DC 58 POP EAX 001400DD 010424 ADD DWORD PTR SS:[ESP],EAX 001400E0 9C PUSHFD 001400E1 8F05 1C001400 POP DWORD PTR DS:[14001C] 001400E7 58 POP EAX 001400E8 FF30 PUSH DWORD PTR DS:[EAX] 001400EA 58 POP EAX 001400EB 010424 ADD DWORD PTR SS:[ESP],EAX 001400EE 9C PUSHFD 001400EF 8F05 30001400 POP DWORD PTR DS:[140030] 001400F5 68 4DF9ADA9 PUSH A9ADF94D 四. 最后的一点废话 这里猜想作者是想用和底层同样的扫描架构来识别伪代码, 这个效果到底怎么样现在还不太清楚, 我看了一下,Patch 的代码并不完全准确, 特别是在跳转方面,VMSweeper 并没有 patch 完整的伪代码, 期待 VMSweeper 的改进 最后感谢一下 VMSweeper 的作者, 放出这个插件让我们可以学习到 VMP 的知识 相关工具 Immunity Debugger 1.5 汉化修正 080417 VMSweeper1.4 beta 8 VMProtect.Ultimate.V2.0.4.4140.Incl.License.Offer.By.1 ST A_OllyDBG_1.10_second_cao_cong_fix22 一只小菜鸟 2011-03-01 11