2019年1月18日-22日【综合学习JVM指令集】

2019年1月22日星期二

这三天作息有些混乱,有些贪玩,不太好一天一天写,由于玩的原因,之前请假一天在这里生效,还有两天的机会。

19日晚上我和朋友去看了白蛇,感概颇多,学习博客,不谈心情~~略过这一节

18、19日打了三国杀,看了小说,内心愧疚空虚,故决意余下时间不虚度光阴,每天玩耍时间不超过3h,这样我有24-8-3-2=11个小时的学习时间,决议通过

21、22日请假一天,调整状态,另外一天整理学习资料,开始考研学习。

下面正式部分,首先是我这几日工作目录:

1、整理病毒分析防护课程的课程要求:

第一节:病毒的基本行为

实验任务:

1、强制隐藏.exe文件的扩展名

2、隐藏“文件夹选项”子菜单项

3、注册表失效

4、U盘传播病毒原理1:适用于硬盘和移动硬盘

5、U盘传播病毒原理2:单击鼠标右键选择打开失败

6、关闭系统自动播放功能

7、阻止AutoRun.inf文件的创建

8、利用注册表实现记事本程序自启动

9、利用注册表改变文本文件所关联的程序

10、利用注册表禁止记事本程序运行

第二章:病毒行为监控——搭建反病毒实验室

第三章:VBScript脚本病毒分析和清除

VBScript语法(可查询“微软VbScript手册vbs.chm”)

1. 文件操作

(1)   创建文件对象:文件操作前都要创建文件对象

Set fso = CreateObject("Scripting.FileSystemObject")

(2)   以只读方式打开当前脚本:WScript.ScriptFullname当前运行脚本的路径

fso.OpenTextFile(WScript.ScriptFullname,1)

(3)   以文本形式读取file整个文件:file.ReadAll

(4)   获取指定文件夹的路径 :fso.GetSpecialFolder(1)  

‘ 1:'获取System文件夹路径,0:windows文件夹,2:temp文件夹

(5)   根据路径获取文件:fso.GetFile(WScript.ScriptFullName)      

(6)   备份文件:c.Copy(dirsystem&"\MSKernel32.vbs")  

(7)   取文件后缀:fso.GetExtensionName(f1.path)  

(8)   获得文件夹句柄:fso.GetFolder(folderspec) ‘folderspec为文件夹路径

(9)   创建文件:fso.CreateTextFile(f1.path&".vbs"),f1.path&".vbs"为路径及文件名

(10)  文件属性:f1.attributes = 2为隐藏文件

(11)  子文件夹:folder.SubFolders

2. 注册表操作

(1)   创建注册表对象:Set regedit = CreateObject("WScript.Shell")

创建WScript.Shell对象,用来修改注册表

(2)   写注册表:regedit.RegWrite regkey,regvalue

(3)   删除注册表:regedit.RegDelete regkey

注:regkey,regvalue是函数RegWrite/RegDelete的参数

3. 进程操作

(1)   创建进程对象:Set winm = GetObject(“winmgmts:")

(2)   vbs文件:由wscript.exe进程调用并执行

(3)   查询所有wscript.exe进程:

pocs=winm.execquery("select * from win32_process where name = 'wscript.exe'")

(4)   终止进程:processor.terminate

第四章:反汇编工具的使用

1.     熟悉动态分析工具OllyDBG的界面和常用模块

2.     熟悉静态分析工具IDA的界面和常用模块

3.     掌握使用OllyDBG和IDA分析修改可执行文件的方法

第五章:手工编写PE文件

第六章:PE病毒分析

第七章:linux脚本病毒

第八章:DLL劫持病毒的分析研究

期末论文包含两部分:

(1)计算机病毒分析

《病毒分析与防护》描述了几类计算机病毒,挑选一类,阐述该类病毒的特点,病毒实现的原理及病毒预防的措施。

(2)《病毒分析与防护》课程总结

1)你期待中的《病毒分析与防护》,应该采用什么样的形式教学?

2)这门课有哪些需要改进的地方?如果以后再开这门课,你有什么建议?对于你的建议,能够再细化和具体化?

3)通过这门课的学习,有收获吗?如果有,收获是什么?

2、通过下面博客学习JVM字节码与JAVA基础反汇编

http://www.vuln.cn/7115

http://www.vuln.cn/7116

http://www.vuln.cn/7117

http://www.vuln.cn/7118

博客一:

54.2返回一个值

54.3 简单的计算函数

54.4 JVM内存模型

54.5 简单的函数调用

54.6 调用beep()函数

1、在此博客中学习了jvm字节码(即反汇编码),同下面3个博客,都是在给学习java逆向打下基础的文章

2、传递返回值的时候

返回值为整形:

public class ret

{

    public static int main(String[] args)

    {

        return 12345678;

    }

}

-1、1、2、3、4、5用iconst_0

6到32767【65535/2】用sipush

32768到2147483647用idc #2  //此乃常量,存于常量区,#2=interger 12345678

超过21474835647【4字节全1,编译器报错,无法编译】

返回值为长整形:

ldc2_w #2                         //常量存储

lreturn

返回值为float:

ldc  #2                // float 123.456f

freturn

返回值为double:

ldc2_w  #2       // double 123.456d

dreturn

3、JVM内存模型

X86和其他低级环境系统使用栈传递参数和存储本地变量,JVM稍微有些不同。

主要体现在: 本地变量数组(LVA)被用于存储到来函数的参数和本地变量。iload_0指令是从其中加载值,istore存储值在其中,首先,函数参数到达:开始从0 或者1(如果0参被this指针用。),那么本地局部变量被分配。

4、函数调用:

Invokevirtual:从常量区取信息,然后调用println()方法

Putstatic #3:将常量放入存储位置

Gertstatic:取得对象的一个引用或者地址,输出并将其进栈

博客二:

54.13数组

54.14字符串

54.14.1第一个例子

Newarray int:创建一个数组,大小有bipush决定,类型由int决定

Multianewarray:创建多维数组

博客三:

54.7线性同余伪随机数生成器

54.8条件跳转

54.9传递参数值

54.10位

54.11循环

条件跳转:

if (a<0)

return -a;

Ifge:如果a大于等于0,跳转

if (a>b)

return b;

If_icmple:如果a小于等于b,跳转

if (a>=0)

return -a;

if_icmpge如果0大于a,跳转

ifne:if not equal

具体的情况请看下图,大有学问:

 

 

总结如下:

符号

与0比较

与100比较

ifge

if_icmpge

<=

ifgt

if_icmpgt

==

ifne

if_icmpne

ifle

if_icmple

>=

iflt

if_icmplt

博客四:

54.15异常

54.16类简单类

54.17简单的补丁。

附带JVM指令助记符:

引用:https://bbs.pediy.com/thread-15286.htm

Standard Opcodes

0 0x00 nop 
1 0x01 aconst_null 
2 0x02 iconst_m1 
3 0x03 iconst_0 
4 0x04 iconst_1 
5 0x05 iconst_2 
6 0x06 iconst_3 
7 0x07 iconst_4 
8 0x08 iconst_5 
9 0x09 lconst_0 
10 0x0a lconst_1 
11 0x0b fconst_0 
12 0x0c fconst_1 
13 0x0d fconst_2 
14 0x0e dconst_0 
15 0x0f dconst_1 
16 0x10 bipush 
17 0x11 sipush 
18 0x12 ldc 
19 0x13 ldc_w 
20 0x14 ldc2_w 
21 0x15 iload 
22 0x16 lload 
23 0x17 fload 
24 0x18 dload 
25 0x19 aload 
26 0x1a iload_0 
27 0x1b iload_1 
28 0x1c iload_2 
29 0x1d iload_3 
30 0x1e lload_0 
31 0x1f lload_1 
32 0x20 lload_2 
33 0x21 lload_3 
34 0x22 fload_0 
35 0x23 fload_1 
36 0x24 fload_2 
37 0x25 fload_3 
38 0x26 dload_0 
39 0x27 dload_1 
40 0x28 dload_2 
41 0x29 dload_3 
42 0x2a aload_0 
43 0x2b aload_1 
44 0x2c aload_2 
45 0x2d aload_3 
46 0x2e iaload 
47 0x2f laload 
48 0x30 faload 
49 0x31 daload 
50 0x32 aaload 
51 0x33 baload 
52 0x34 caload 
53 0x35 saload 
54 0x36 istore 
55 0x37 lstore 
56 0x38 fstore 
57 0x39 dstore 
58 0x3a astore 
59 0x3b istore_0 
60 0x3c istore_1 
61 0x3d istore_2 
62 0x3e istore_3 
63 0x3f lstore_0 
64 0x40 lstore_1 
65 0x41 lstore_2 
66 0x42 lstore_3 
67 0x43 fstore_0 
68 0x44 fstore_1 
69 0x45 fstore_2 
70 0x46 fstore_3 
71 0x47 dstore_0 
72 0x48 dstore_1 
73 0x49 dstore_2 
74 0x4a dstore_3 
75 0x4b astore_0 
76 0x4c astore_1 
77 0x4d astore_2 
78 0x4e astore_3 
79 0x4f iastore 
80 0x50 lastore 
81 0x51 fastore 
82 0x52 dastore 
83 0x53 aastore 
84 0x54 bastore 
85 0x55 castore 
86 0x56 sastore 
87 0x57 pop 
88 0x58 pop2 
89 0x59 dup 
90 0x5a dup_x1 
91 0x5b dup_x2 
92 0x5c dup2 
93 0x5d dup2_x1 
94 0x5e dup2_x2 
95 0x5f swap 
96 0x60 iadd 
97 0x61 ladd 
98 0x62 fadd 
99 0x63 dadd 
100 0x64 isub 
101 0x65 lsub 
102 0x66 fsub 
103 0x67 dsub 
104 0x68 imul 
105 0x69 lmul 
106 0x6a fmul 
107 0x6b dmul 
108 0x6c idiv 
109 0x6d ldiv 
110 0x6e fdiv 
111 0x6f ddiv 
112 0x70 irem 
113 0x71 lrem 
114 0x72 frem 
115 0x73 drem 
116 0x74 ineg 
117 0x75 lneg 
118 0x76 fneg 
119 0x77 dneg 
120 0x78 ishl 
121 0x79 lshl 
122 0x7a ishr 
123 0x7b lshr 
124 0x7c iushr 
125 0x7d lushr 
126 0x7e iand 
127 0x7f land 
128 0x80 ior 
129 0x81 lor 
130 0x82 ixor 
131 0x83 lxor 
132 0x84 iinc 
133 0x85 i2l 
134 0x86 i2f 
135 0x87 i2d 
136 0x88 l2i 
137 0x89 l2f 
138 0x8a l2d 
139 0x8b f2i 
140 0x8c f2l 
141 0x8d f2d 
142 0x8e d2i 
143 0x8f d2l 
144 0x90 d2f 
145 0x91 i2b 
146 0x92 i2c 
147 0x93 i2s 
148 0x94 lcmp 
149 0x95 fcmpl 
150 0x96 fcmpg 
151 0x97 dcmpl 
152 0x98 dcmpg 
153 0x99 ifeq 
154 0x9a ifne 
155 0x9b iflt 
156 0x9c ifge 
157 0x9d ifgt 
158 0x9e ifle 
159 0x9f if_icmpeq 
160 0xa0 if_icmpne 
161 0xa1 if_icmplt 
162 0xa2 if_icmpge 
163 0xa3 if_icmpgt 
164 0xa4 if_icmple 
165 0xa5 if_acmpeq 
166 0xa6 if_acmpne 
167 0xa7 goto 
168 0xa8 jsr 
169 0xa9 ret 
170 0xaa tableswitch 
171 0xab lookupswitch 
172 0xac ireturn 
173 0xad lreturn 
174 0xae freturn 
175 0xaf dreturn 
176 0xb0 areturn 
177 0xb1 return 
178 0xb2 getstatic 
179 0xb3 putstatic 
180 0xb4 getfield 
181 0xb5 putfield 
182 0xb6 invokevirtual 
183 0xb7 invokespecial 
184 0xb8 invokestatic 
185 0xb9 invokeinterface 
187 0xbb new 
188 0xbc newarray 
189 0xbd anewarray 
190 0xbe arraylength 
191 0xbf athrow 
192 0xc0 checkcast 
193 0xc1 instanceof 
194 0xc2 monitorenter 
195 0xc3 monitorexit 
196 0xc4 wide 
197 0xc5 multianewarray 
198 0xc6 ifnull 
199 0xc7 ifnonnull 
200 0xc8 goto_w 
201 0xc9 jsr_w 

Quick Opcodes

203 0xcb ldc_quick 
204 0xcc ldc_w_quick 
205 0xcd ldc2_w_quick 
206 0xce getfield_quick 
207 0xcf putfield_quick 
208 0xd0 getfield2_quick 
209 0xd1 putfield2_quick 
210 0xd2 getstatic_quick 
211 0xd3 putstatic_quick 
212 0xd4 getstatic2_quick 
213 0xd5 putstatic2_quick 
214 0xd6 invokevirtual_quick 
215 0xd7 invokenonvirtual_quick 
216 0xd8 invokesuper_quick 
217 0xd9 invokestatic_quick 
218 0xda invokeinterface_quick 
219 0xdb invokevirtualobject_quick 
221 0xdd new_quick 
222 0xde anewarray_quick 
223 0xdf multianewarray_quick 
224 0xe0 checkcast_quick 
225 0xe1 instanceof_quick 
226 0xe2 invokevirtual_quick_w 
227 0xe3 getfield_quick_w 
228 0xe4 putfield_quick_w 

Reserved Opcodes

202 0xca breakpoint 
254 0xfe impdep1 
255 0xff impdep2

猜你喜欢

转载自www.cnblogs.com/wuruixin/p/10306164.html