ivanleung 发表于 2010-6-14 10:12

花指令的解說

花指令
  (junk code) 意思是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种 jmp, call, ret, 一些堆栈技巧,位置运算,等等
  如:
  jz label
  jnz label
  db thunkcode
  label:
  mov ax, 8
  xor ax, 77
  ...
  这里假设从label伪指令开始是我们以mov ax,8打头的加密算法,当thunkcode为一条非单字节指令(nop等)的机器指令的时候反汇编器可能就会把thunkcode和后面的mov一起反汇编,从而导致后面的一系列汇编语句的反汇编错误,这样就隐藏了真正的汇编语句。
  【深层】伪装 PEtite 2.2 -> Ian Luck 汇编代码:
  ============================
  伪装代码部分:
  ============================
  mov eax,0040E000
  push 004153F3
  push dword ptr fs:
  mov dword ptr fs:,esp
  pushfw
  pushad
  push eax
  xor ebx,ebx
  pop eax
  popad
  popfw
  pop dword ptr fs:
  pop eax
  jmp XXXXXXXX '执行到程序的原有OEP
  ============================
  【深层】伪装 WCRT Library (Visual C++) DLL Method 1 -> Jibz 二进制代码 + 汇编代码:
  ============================
  伪装代码部分:
  ============================
  使用二进制粘贴以下代码:
  55 8B EC 83 7D 0C 01 75 41 A1 C0 30 00 10 85 C0 74 0A FF D0 85 C0 75 04 6A FE EB 17 68 0C 30 00 10 68 08 30 00 10 E8 89 00 00 00 85 C0 59 59 74 08 6A FD FF 15 08 20 00 10 68 04 30 00 10 68 00 30 00 10 E8 52 00 00 00 59 59
  粘贴完毕后,再添加2行汇编语句:
  jmp XXXXXXXX '执行到程序的原有OEP
  retn 0C
  1。伪装 vc
  VC++程序的入口代码:
  PUSH EBP
  MOV EBP,ESP
  PUSH -1
  push 415448 -\___
  PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填
  MOV EAX,DWORD PTR FS:
  PUSH EAX
  MOV DWORD PTR FS:,ESP
  ADD ESP,-6C
  PUSH EBX
  PUSH ESI
  PUSH EDI
  ADD BYTE PTR DS:,AL /这条指令可以不要!
  jmp 跳转到程序原来的入口点
  ******************************************************************************************
  2。跳转
  somewhere:
  nop /"胡乱"跳转的开始...
  jmp 下一个jmp的地址 /在附近随意跳
  jmp ... /...
  jmp 原入口的地址 /跳到原始oep
  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  新入口: push ebp
  mov ebp,esp
  inc ecx
  push edx
  nop
  pop edx
  dec ecx
  pop ebp
  inc ecx
  loop somewhere /跳转到上面那段代码地址去!
  3. 伪装 C
  融合
  把A的代码换成B的
  push ebp
  mov ebp,esp
  push -1
  push 111111
  push 222222
  mov eax,fs:
  push eax
  mov fs:,esp
  pop eax
  mov fs:,eax
  pop eax
  pop eax
  pop eax
  pop eax
  mov ebp,eax
  jmp 老入口
  4. c ++
  push ebp
  mov ebp,esp
  push -1
  push 111111
  push 222222
  mov eax,fs:
  push eax
  mov fs:,esp
  pop eax
  mov fs:,eax
  pop eax
  pop eax
  pop eax
  pop eax
  mov ebp,eax
  5.Microsoft Visual C++ 6.0
  PUSH -1
  PUSH 0
  PUSH 0
  MOV EAX,DWORD PTR FS:
  PUSH EAX
  MOV DWORD PTR FS:,ESP
  SUB ESP,68
  PUSH EBX
  PUSH ESI
  PUSH EDI
  POP EAX
  POP EAX
  POP EAX
  ADD ESP,68
  POP EAX
  MOV DWORD PTR FS:,EAX
  POP EAX
  POP EAX
  POP EAX
  POP EAX
  MOV EBP,EAX
  JMP 原入口
  6.
  在mov ebp,eax
  后面加上
  PUSH EAX
  POP EAX
  7:
  防杀精灵一号防杀代码:
  push ebp
  mov ebp,esp
  push -1
  push 666666
  push 888888
  mov eax,dword ptr fs:
  push eax
  mov dword ptr fs:,esp
  pop eax
  mov dword ptr fs:,eax
  pop eax
  pop eax
  pop eax
  pop eax
  mov ebp,eax
  jmp 入口
  8:
  防杀精灵二号防杀代码:
  push ebp
  mov ebp,esp
  push -1
  push 0
  push 0
  mov eax,dword ptr fs:
  push eax
  mov dword ptr fs:,esp
  sub esp,68
  push ebx
  push esi
  push edi
  pop eax
  pop eax
  pop eax
  add esp,68
  pop eax
  mov dword ptr fs:,eax
  pop eax
  pop eax
  pop eax
  pop eax
  mov ebp,eax
  jmp 入口
  9.
  防杀精灵终极防杀代码
  push ebp
  mov ebp,esp
  add esp,-0C
  add esp,0C
  push eax
  jmp入口
  10:
  木马彩衣(金色鱼锦衣)花代码
  push ebp
  mov ebp,esp
  add esp,-0C
  add esp,0C
  mov eax,原入口
  push eax
  retn
  11:
  木马彩衣(虾米披风)花代码
  push ebp
  nop
  nop
  mov ebp,esp
  inc ecx
  nop
  push edx
  nop
  nop
  pop edx
  nop
  pop ebp
  inc ecx
  loopd /跳转到下面那段代码地址去!
  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  nop /"胡乱"跳转的开始...
  jmp 下一个jmp的地址 /在附近随意跳
  jmp ... /...
  jmp 原入口的地址 /跳到原始oep
  12.
  VC++5.0代码(木马彩衣无限复活袍):
  PUSH EBP
  MOV EBP,ESP
  PUSH -1
  push 415448 -\___
  PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填
  MOV EAX,DWORD PTR FS:
  PUSH EAX
  MOV DWORD PTR FS:,ESP
  ADD ESP,-6C
  PUSH EBX
  PUSH ESI
  PUSH EDI
  ADD BYTE PTR DS:,AL /这条指令可以不要!
  jo 00401000 /原入口
  jno 00401000 /原入口
  db 0e8h /花代码

qhd11 发表于 2010-6-14 10:52

太专业了,学习。

redcarp 发表于 2010-6-14 11:07

太好了,学习。。。

sjg8 发表于 2010-7-31 09:27

看来还要多多破解,经验很重要

qq526033781 发表于 2010-7-31 12:08

fsafs168 发表于 2011-2-16 21:13

原来如此,这就是花指令啊

fhch6 发表于 2011-2-17 14:30

这么好的教程,学习了。

caoqingzhao 发表于 2011-3-1 21:13

看不懂

家园春正浓 发表于 2011-3-1 21:15

学习了    谢楼主    呵呵

duoluo211 发表于 2011-3-1 21:19

学习了!这么好的东西!
页: [1] 2
查看完整版本: 花指令的解說