易语言逆向分析

Similar documents
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

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


untitled

untitled


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

2

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

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

(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) (

zt

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

Ps22Pdf

Ctpu

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

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

Microsoft Word - NHIS2013_C_130716_送印_.doc

Microsoft Word - “调戏”反遭“反调戏”—记Visual Toolbar 的破解过程.doc

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

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)

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

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

目錄

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

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


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

(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) A (D) (E). (A)(B)(C)(D)(E) A

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

高二立體幾何

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

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


WCA Regulations and Guidelines


2007年普通高等学校招生全国统一考试

untitled

! "#$! " # $%%& ($! )*+, -. %/. %(&%%$. 0!!#! "#! ##..! $# 1($! 2)3 $%%& %4&/&&!!!!!!!!!!! %(%. 5/%0/066!!! /! 6%%. 6(%. %046! (%%%((!!! 7889"" :::# 7

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

E170C2.PDF

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

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

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

<4D F736F F D20C6C0BCB6B1A8B8E6B7E2C3E6A3A8C8F0B0B2B9FACDB6B8FAD7D9A3A9>

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

#$%&% () % ()*% +,-. /01 % + (/) " " " 2- %** -340 $%&% 5!$%&% () % ()*% +,-. /01 % + (/) " " " 2- %** -340 /64 7%,(8(, *--9( ()6 /-,%/,65 :$%&

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

zt

untitled

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20


( )1

23.0 CTL c VENDOR :USBASP_FUNC_CONNECT( 蓝色的字都是关键字 ) 23.0 CTL c VENDOR :USBASP_FUNC_ENABLEP

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

DLU-5490N-7-WB/CP-160 1

#!$ %" & ( &)*+,((&-,./ )01,+2 ( /., )>2/ 80;2 +&,($ J &( > =.>? =0+ 9, *,0*., 0= )>2/ 2> &02($ J &( > A.;, % 9 > )>* 0= &2 9, )&11.,

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

!"# $%& ()) *+,+)-./01!"# $%& ()) *+,+)-./01!"#! "#$ 2!"# ):; 2!B! 2 "B # $ 2 %4 C C 2 &4 %D?<?4 6<5 2 (9D =6

<4D F736F F D F F315FAAFEA5F333AAF9B645C2E5C0F8AA41B0C8C249BCC6B24DB3E6B443C5E9A5D3B3F8AEE6A6A12E646F63>

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

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

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


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

Ps22Pdf


> >- 3#& 4,&"("-"*)# 5),)# 2+!"#$%& ()$ *+,-./00/$1 *+,2 304")56& *+,7 89"$0/"$%:$% *+;2 *++< *+++ >--> >--2 /01 #2),.,%)%!!"#$%!"!!" >--2 *- >--, + *

1-1 2

!"#!"# $ %&&% " ()*+,-&*,+-.-+&!/ "/# $ %/+ &/0*-1$12!"# %&&% &1&%1&! #$$# -% -&&&% $89:;6$<=>,.&?--2, - 1% -%$. %&&% 2- %&&% 2 - " ()*+,-

ROP_bamboofox.key

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

4! 4&54! !! - 4"$ % ! # &7& - 4-4&%& $%%% 4&4$ 4&&$ 4&54 4& 7-4&"7 $ - 8-9::;(1< - =- >- =?/)

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

<4D F736F F D20C1E3B5E3CFC2D4D8C4A3B0E52E646F63>

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



2. 过程 这里主要使用 gdb 来拆炸弹 当然, 用其他工具来辅助, 应该可以更高效地完成 (gdb) echo ======================= Defuse Phase_1 ==============================\n\n ==================


njj00118zw.PDF

<4D F736F F D20A1BE A1BF C4EABDADCBD5D7CFBDF0C5A9B4E5C9CCD2B5D2F8D0D0B9C9B7DDD3D0CFDEB9ABCBBEB8FAD7D9C6C0BCB6B1A8B8E6A3A8B8FAD7D A3A9>

箫.doc


※※※※※

第三章 相图基础

Microsoft Word - n doc

SIGNUM 3SB3

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

說 明, 成 個 體 統 才 是! 你 痰 迷 了 心, 脂 油 蒙 了 竅, 國 孝 家 孝 兩 重 在 身, 就 把 個 人 送 來 了 這 會 子 被 人 家 告 我 們, 我 又 是 個 沒 腳 蟹, 連 官 場 中 都 知 道 我 利 害 吃 醋, 如 今 指 名 提 我, 要 休 我,


untitled

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

口袋妖怪3d【口袋妖怪Encore】Game Freak美术设计师吉田宏信传达包

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

zt

Transcription:

易语言介绍 易语言功能强大, 具有多个支持库, 可以很快的进行产品开发 与其它语言相比, 学习难度也低一些, 目前很多的外 挂程序, 核心功能编写为动态链接库, 界面开发的工作会使用易语言来进行 易语言编写的程序, 最终的功能实现, 还是需要调用系统的动态链接库 我对易语言的理解是对系统动态库中常用的 功能进行了一次封装, 使其使用起来更加方便简单 由于易语言本身带有多个支持库, 使用我们的逆向分析变得困难重重 我们无法分辨哪些是初始化操作, 哪些是关键 代码, 我们不能很容易的找到程序所使用到的系统函数等等 带着这些问题, 我对易语言的程序进行了一些逆向分 析, 分享给大家, 希望对你有帮助 本文以下面的样本为例子 : 样本名称 :1.exe 样本 MD5:ab58a0167e3f318226e1937e983be3d0 样本 SHA1:f28d8d6a4074ba296209e69e4a59e278cadb95e7 样本来源 :http://www.52pojie.cn/thread-430260-1-1.html 支持库加载过程 易语言生成的程序, 运行后, 首先进行的操作是在 Temp 目录下创建新的文件夹, 并将自身所需要的支持库释放到该 目录下, 文件后缀为.fnr.fne 等等, 如下图 接着会使用函数 LoadLibraryA 将支持库 krnln.fnr 加载到内存中, 使用 GetProcAddress 获取其导出函数 GetNewSock 的地址, 并通 过 call eax 调用进行初始化的相关操作

初始化前后, 第二个 data 段的对比 可以看到, 当程序执行到 0x46DD99 时,0x46DDD0-0x46DE12 处的函数地址已经填充完毕, 程序通过这些函数来执行操作 而其它支持库 ( 如 :eapi.fne EThread.fne) 的调用过程是通过 krnln.fnr 来完成的, 同样也会使用 LoadLibraryA 来加载支持 库,GetProcAddress 获取函数 GetNewInf 地址, 并进行调用, 同样, 该函数的功能也是进行相关初始化操作 易语言实现各种功能, 最终还是需要调用系统函数, 但是如何进行调用的, 我们如何扒开这些外壳, 来找到系统函数 的调用地址 函数调用 程序所实现的功能, 需要依赖于系统动态链接库中的各种函数 通过分析发现, 易语言的程序有两种函数调用, 一是 直接调用系统动态链接库函数, 二是调用其它支持库函数 但两种函数的调用, 都是经过支持库 krnln.fnr 发起 krnln.fnr --> 系统动态链接库函数 krnln.fnr --> 其它支持库 ( 如 :eapi.fne EThread.fne) --> 系统动态链接库函数 下面对两种调用进行分析, 围绕如何调用和参数传递来介绍 直接调用系统函数 以 Process32Next 为例, 说明一下调用过程 : 0046D05D B8 06000000 mov eax,0x6 ; ID 号, 用来指明调用哪个函数 0046D062 E8 A50D0000 call 1.0046DE0C ; 获取并调用该函数 0046D067 3965 EC cmp dword ptr ss:[ebp-0x14],esp 当执行到 0x46D062 时, 此时栈中的数据, 就是所调用函数的参数 0012FA48 00000108 0012FA4C 00242820 F7 进入该函数

0046DE0C - FF25 01C44600 jmp dword ptr ds:[0x46c401] ; krnln.1002cc84 再次 F7 进入到函数内部, 在分析时, 可以把此部分当作特征, 定位调用系统函数的位置 1002CC84 50 push eax ; 传入 ID 号 1002CC85 E8 E7FFFFFF call <krnln.getprocaddress_byid> ; 获取函数地址 1002CC8A 83C4 04 add esp,0x4 1002CC8D FFE0 jmp eax ; 调用该函数 执行到 0x1002CC8D,F7 进入, 看栈中数据 0012FA44 0046D067 /CALL 到 Process32Next 来自 1.0046D062 0012FA48 00000108 hsnapshot = 00000108 (window) 0012FA4C 00242820 \lppe 这样就完成了一次调用过程 还有一个问题没有解决, 如何通过 ID 号, 来判断要获取的是哪个函数的地址呢? 猜测在程序中应该有一个表, 跟 到 GetProcAddress_ByID 函数中, 来看一下如何从 ID 号获取的函数名称 在该函数内部, 我们找到下面的代码 1005AF78 8B87 D0010000 mov eax,dword ptr ds:[edi+0x1d0] ; edi=0x10118678, 计算之后,eax=0x15E5e8 1005AF7E 8B0498 mov eax,dword ptr ds:[eax+ebx*4] 1005AF81 894424 10 mov dword ptr ss:[esp+0x10],eax ; 1.0040948E 得到函数名称列表 0015E538 0040947A ASCII "UnhookWindowsHookEx" 0015E53C 0040948E ASCII "OpenProcess" 0015E540 0040949A ASCII "ZwResumeProcess" 0015E544 004094AA ASCII "CloseHandle" 0015E548 004094B6 ASCII "CreateToolhelp32Snapshot" 0015E54C 004094CF ASCII "Process32First" 0015E550 004094DE ASCII "Process32Next" 0015E554 004094EC ASCII "GetModuleHandleA" 0015E558 004094FD ASCII "SetWindowsHookExA" 0015E55C 0040950F ASCII "RtlAdjustPrivilege" 0015E560 00409522 ASCII "ZwSuspendProcess" 0015E564 00409533 ASCII "ClipCursor" 0015E568 0040953E ASCII "CallNextHookEx" 有了这个函数列表, 也知道了参数是如何进行传递的, 这就可以当函数执行到 0x46D062 时, 我们就知道本次调用的函数是哪个, 也知道传入的参数有哪些, 无需再进行 krnln 模块中进行分析 同时, 我们还可以使用指令搜索, 来获取哪个函数会在什么地址处被调用 例如 : 我们想知道函数 CreateToolhelp32Snapshot 在哪些被调用, 查找函数名称表, 可以知道该函数的 ID 号为 4 我们就可以查找命令序列 mov eax,0x4 call 0046DE0C 来定位调用该函数的地址 调用易语言模块的函数 以调用 EThread 支持库中某函数为例 0046D645 BB 00000000 mov ebx,0x0 0046D64A B8 04000000 mov eax,0x4 0046D64F E8 9A070000 call 1.0046DDEE

通过 eax ebx 来计算需要调用的模块及函数地址, 而函数调用的参数则通过栈来传递 F7 进入该函数 0046DDEE - FF25 05C44600 jmp dword ptr ds:[0x46c405] ; krnln.1002cc8f 再次 F7, 进入到函数内部, 该部分代码片段可以用来定位调用支持库函数的地址 1002CC8F 8B15 70861110 mov edx,dword ptr ds:[0x10118670] 1002CC95 8B1482 mov edx,dword ptr ds:[edx+eax*4] ; 读取函数地址 1002CC98 85D2 test edx,edx 1002CC9A 75 0D jnz Xkrnln.1002CCA9 ; 若不为 0, 则跳过函数 0x1005BA00 1002CC9C 51 push ecx 1002CC9D 53 push ebx 1002CC9E 50 push eax 1002CC9F E8 5CED0200 call krnln.1005ba00 ; 计算获取地址 1002CCA4 8BD0 mov edx,eax 1002CCA6 58 pop eax 1002CCA7 5B pop ebx 1002CCA8 59 pop ecx 1002CCA9 03DA add ebx,edx 1002CCAB 8D5424 08 lea edx,dword ptr ss:[esp+0x8] 1002CCAF 83EC 0C sub esp,0xc 1002CCB2 52 push edx 1002CCB3 FF7424 14 push dword ptr ss:[esp+0x14] 1002CCB7 C74424 08 00000>mov dword ptr ss:[esp+0x8],0x0 1002CCBF C74424 0C 00000>mov dword ptr ss:[esp+0xc],0x0 1002CCC7 C74424 10 00000>mov dword ptr ss:[esp+0x10],0x0 1002CCCF 8D5424 08 lea edx,dword ptr ss:[esp+0x8] 1002CCD3 52 push edx 1002CCD4 FF13 call dword ptr ds:[ebx] ; 调用函数 1002CCD6 8B4424 0C mov eax,dword ptr ss:[esp+0xc] 1002CCDA 8B5424 10 mov edx,dword ptr ss:[esp+0x10] 1002CCDE 8B4C24 14 mov ecx,dword ptr ss:[esp+0x14] 1002CCE2 83C4 18 add esp,0x18 1002CCE5 C3 retn 当程序执行到 0x1002CCD4 时, 栈中的数据如下 : 0012FA54 0012FA60 0012FA58 00000003 0012FA5C 0012FA74 a3 0012FA60 00000000 0012FA64 00000000 0012FA68 00000000 0012FA6C 0046D654 返回到 1.0046D654 来自 1.0046DDEE 0012FA70 00000003 0012FA74 0046DA79 1.0046DA79 ebx 的值为 0x155C97C, 而 ds:[0155c97c]=015510d0 (EThread.015510D0), 由于 EThread 模块未进行加密, 我们可以通过 IDA 来加载 EThread 模块进行分析, 加载时, 请注意选择 Manual load, 根据 OD 中该模块所在的基地址进行设置, 这样方法定位函数位置 在 IDA 中, 定位到函数 0x15510D0 void * cdecl sub_15510d0(int a1, signed int ThreadId, int a3) { int v3; // esi@1 signed int v4; // edi@1 void *v5; // eax@3 void *result; // eax@5

v3 = a3; v4 = ThreadId; if ( ThreadId > 1 && *(_DWORD *)(a3 + 20) ) v5 = *(void **)(a3 + 12); else v5 = 0; result = CreateThread(0, 0, *(LPTHREAD_START_ROUTINE *)a3, v5, 0, (LPDWORD)&ThreadId); *(_DWORD *)a1 = result!= 0; if ( v4 >= 3 && *(_DWORD *)(v3 + 32) ) **(_DWORD **)(v3 + 24) = result; else result = (void *)CloseHandle(result); return result; } 可以很清楚的看出该函数的功能是创建线程执行函数, 而关键的参数则是 a3, 通过栈中的数据, 得到 a3 = 0x0012FA74, 而该地址所指向的函数为 :0046DA79, 当函数 0x15510D0 执行完成后, 会返回到地址 0x1002CCD6, 再通过 0x1002CCE5 返回到程 序空间, 完成一次支持库的调用 如果模块被加密, 无法静态分析, 可以在模块加载的时候进行分析, 找出加密算 法, 编写 IDA 脚本进行解密, 或是直接进入动态跟踪进行分析 分析方法 下面来介绍一下我的分析方法, 以及如何快速定位核心代码, 希望对你有帮助 1. OD 载入样本,CTRL+F 查找指令 call eax,ctrl+l 查找下一条, 找到下面的位置 0040150E. FFD0 call eax 00401510. EB 11 jmp X1.00401523 00401512 > 6A 10 push 0x10 ; /Style = MB_OK MB_ICONHAND MB_APPLMODAL 00401514. 68 30704000 push 1.00407030 ; Title = "Error" 00401519. FF75 FC push [local.1] ; Text 0040151C. 53 push ebx ; howner 0040151D. FF15 AC604000 call dword ptr ds:[<&user32.messageboxa>>; \MessageBoxA 00401523 > 5F pop edi 00401524. 5E pop esi 00401525. 33C0 xor eax,eax 00401527. 5B pop ebx 00401528. C9 leave 00401529 \. C2 1000 retn 0x10 2. F4 运行到 0x40150E, 在此之前的代码可以忽略掉, 它们的功能是释放所需要的各种支持库, 并加载 krnln.fnr,f7 进 入 1002D69A 55 push ebp 1002D69B 8BEC mov ebp,esp 1002D69D 6A 00 push 0x0 1002D69F 6A 00 push 0x0 1002D6A1 8B45 08 mov eax,dword ptr ss:[ebp+0x8] 1002D6A4 50 push eax 1002D6A5 B9 78861110 mov ecx,krnln.10118678 1002D6AA E8 B0F4FFFF call krnln.1002cb5f 1002D6AF 5D pop ebp 1002D6B0 C2 0400 retn 0x4 3. F4 运行到 0x1002D6AA,F7 进入 1002CB5F 55 push ebp 1002CB60 8BEC mov ebp,esp 1002CB62 83EC 08 sub esp,0x8 1002CB65 53 push ebx

1002CB66 56 push esi 1002CB67 57 push edi 1002CB68 894D F8 mov dword ptr ss:[ebp-0x8],ecx 1002CB6B FF15 E4630E10 call dword ptr ds:[<&kernel32.getprocess>; kernel32.getprocessheap 1002CB71 8B4D F8 mov ecx,dword ptr ss:[ebp-0x8] 1002CB74 8981 A8040000 mov dword ptr ds:[ecx+0x4a8],eax 1002CB7A 8B55 F8 mov edx,dword ptr ss:[ebp-0x8] 1002CB7D 8B82 C4000000 mov eax,dword ptr ds:[edx+0xc4] 1002CB83 83C0 01 add eax,0x1 1002CB86 8B4D F8 mov ecx,dword ptr ss:[ebp-0x8] 1002CB89 8981 C4000000 mov dword ptr ds:[ecx+0xc4],eax 1002CB8F 8B55 10 mov edx,dword ptr ss:[ebp+0x10] 1002CB92 52 push edx 1002CB93 8B45 0C mov eax,dword ptr ss:[ebp+0xc] 1002CB96 50 push eax 1002CB97 8B4D 08 mov ecx,dword ptr ss:[ebp+0x8] 1002CB9A 51 push ecx 1002CB9B 8B4D F8 mov ecx,dword ptr ss:[ebp-0x8] 1002CB9E E8 FD1F0300 call krnln.1005eba0 1002CBA3 FFD0 call eax 4. F4 运行到 0x1002CBA3,F7 进入, 至此, 已经回到了用户空间, 从现在开始才到了程序实现功能的位置, 从这里开始 进行分析 进入每一个 jmp 的地址, 找出直接调用系统的地址和调用自带支持库的地址, 对两个地址下断点, 就可 以直接 F9 运行, 直接后续的分析操作了 0046DD99 FC cld 0046DD9A DBE3 finit 0046DD9C E8 F7FFFFFF call 1.0046DD98 0046DDA1 68 84DD4600 push 1.0046DD84 0046DDA6 B8 03000000 mov eax,0x3 0046DDAB E8 32000000 call 1.0046DDE2 0046DDB0 83C4 04 add esp,0x4 0046DDB3 68 01000152 push 0x52010001 0046DDB8 E8 1F000000 call 1.0046DDDC 0046DDBD 83C4 04 add esp,0x4 0046DDC0 E8 11000000 call 1.0046DDD6 0046DDC5 6A 00 push 0x0 0046DDC7 E8 04000000 call 1.0046DDD0 0046DDCC 83C4 04 add esp,0x4 0046DDCF C3 retn 0046DDD0 - FF25 21C44600 jmp dword ptr ds:[0x46c421] ; krnln.1002d56f 0046DDD6 - FF25 25C44600 jmp dword ptr ds:[0x46c425] ; krnln.1002d4d2 0046DDDC - FF25 29C44600 jmp dword ptr ds:[0x46c429] ; krnln.1002d505 0046DDE2 - FF25 2DC44600 jmp dword ptr ds:[0x46c42d] ; krnln.1002cc6a 0046DDE8 >- FF25 1DC44600 jmp dword ptr ds:[0x46c41d] ; krnln.1002d66a 0046DDEE - FF25 05C44600 jmp dword ptr ds:[0x46c405] ; krnln.1002cc8f 0046DDF4 - FF25 11C44600 jmp dword ptr ds:[0x46c411] ; krnln.1002d4ab 0046DDFA - FF25 09C44600 jmp dword ptr ds:[0x46c409] ; krnln.1002cce6 0046DE00 >- FF25 15C44600 jmp dword ptr ds:[0x46c415] ; krnln.1002d58c 0046DE06 - FF25 FDC34600 jmp dword ptr ds:[0x46c3fd] ; krnln.1002d46e 0046DE0C - FF25 01C44600 jmp dword ptr ds:[0x46c401] ; krnln.1002cc84 0046DE12 - FF25 0DC44600 jmp dword ptr ds:[0x46c40d] ; krnln.1002d48c 总结 通过这一个样本的分析, 我们知道了一些易语言分析的规律, 支持库的加载过程 函数的调用过程 分辨出支持库的 加载过程可以让我们跳过不必要的分析, 直接进入功能代码分析 ; 而函数的调用过程更像是把握住了程序的两个入 口, 这对于逆向分析, 判断样本的功能具有极大的作用 ( 如有问题, 请联系 :l0g1n@qq.com,2015.11.20,by l0g1n)