首页
社区
课程
招聘
[讨论]Themida 初步研究(ANTI篇)
发表于: 2006-5-16 05:26 17122

[讨论]Themida 初步研究(ANTI篇)

2006-5-16 05:26
17122
Themida 初步研究(ANTI篇)

某些马甲靠themida来赚钱的,我很生气,搞技术就搞技术,骂人在论坛真恶心.刚好200篇水贴,凑一篇水贴作为纪念.

    我说了themida在ANTI上很弱很弱,可以说,浪费了我的时间,我不想学它的VM方式
用不上那么夸张,我写花指令垃圾可以写上10000M,那么,我们看看它的ANTI.

    在OD中打开无效和特权指令异常.它仅仅2个anti,都是解码后出现的,我现在明白了
为什么它不解码就可以跳过的BUG问题出在什么地方了.它的调试字符串不值得提,老掉牙了
   
    多话不说了,我们先将themida的anti选项都选择上,别看它花里胡哨的那么多,基本
是花瓶,一碰就破的.(如图)



    将虚拟机放到最小,其它选择都关了,我的是笔记本在跑,不想和它比机器占用率.
    将entry point 放到0,这篇是玩它的ANTI的,这些后面的干扰手段我们先不用.(如图)

    有空我们再一篇一篇的肢解它..
   
   
    将themida给记事本加壳,轰轰烈烈的又是算VM(基本的)又是拆setion,最后加上了.
    不知道为什么,我的ODbgScript 1.47有问题,下内存写断点变成了内存读断点,我晕
   
   
   
    第一个异常:
011ADA34    59              pop     ecx                              ; 0007FFE0
011ADA35    40              inc     eax
011ADA36    0F3F            ???                                      ; 未知命令
011ADA38    07              pop     es

    看SEH句柄过
   
    第二个异常:
011ADBA2    81EA E85F3400   sub     edx,345FE8
011ADBA8    ED              in      eax,dx
011ADBA9    81FB 68584D56   cmp     ebx,564D5868

    同样看SEH句柄过   
   
    过2个异常后,下VirtualAllocEx断点三次(它将虚拟机解出来),
   
011B3FE6    68 1541672C     push    2C674115
011B3FEB  ^ E9 29BAFFFF     jmp     011AFA19
011B3FF0    68 99C1004D     push    4D00C199        ; 从系统区返回这里
011B3FF5  ^ E9 1FBAFFFF     jmp     011AFA19
011B3FFA    68 C8AC9D17     push    179DACC8
011B3FFF  ^ E9 15BAFFFF     jmp     011AFA19
011B4004    68 60F14E17     push    174EF160
011B4009  ^ E9 0BBAFFFF     jmp     011AFA19
011B400E    68 91C85221     push    2152C891
011B4013  ^ E9 01BAFFFF     jmp     011AFA19
011B4018    68 A2EE450D     push    0D45EEA2
   
    下LoadLibraryA断点,返回壳代码区

011B9F08    FF95 25073509   call    near dword ptr [ebp+9350725]; kernel32.LoadLibraryA
011B9F0E    66:8BF0         mov     si,ax                        ;返回这里
011B9F11    8D9D EB774009   lea     ebx,dword ptr [ebp+94077EB]

   
    直接在用户代码区下内存写断点.断在这里,取消内存写断点
   
011EA3FD    8BFA            mov     edi,edx
011EA3FF    8BF1            mov     esi,ecx
011EA401    8BD1            mov     edx,ecx
011EA403    8BC8            mov     ecx,eax   
011EA405    F3:A4           rep     movsb                     //断在这里
011EA407    C685 55253509 5>mov     byte ptr [ebp+9352555],56

这里就是将解码后的代码放回,过这里后,看ESP,[ESP+1C]就是它要去的OEP,这里下硬件写断点
将停在这里.

011F5FFC    8BC0            mov     eax,eax
011F5FFE    61              popad
011F5FFF    68 9D730000     push    739D                  ;看见了么,这个是什么
011F6004    9C              pushfd
011F6005    6A 00           push    0
011F6007    50              push    eax

F7过一步,继续断这里,它肯定要加上段地址

011F6849    5D              pop     ebp
011F684A    F5              cmc
011F684B    014424 08       add     dword ptr [esp+8],eax   又断在这里,eax==01000000
011F684F    6A 00           push    0
011F6851    52              push    edx                              ;

(它的最后去OEP是这样的)

011F689D    9D              popfd
011F689E    C3              retn                ;刚才将OEP算出来了压在堆栈,飞去OEP了

好了OEP出来了,就这样简单.直接下断到OEP.

飞到光明地方,DUMP出来,IAT修复,砍掉壳区,88K!!

再次同样选项测试regedit.exe  一模一样,再次增减各个选项测试,一模一样,收工...

这就是它第一项花里胡哨的东西,我写脚本和文章时间超过我跟踪它这些选项的时间.切........
最近老有活,不然有空把它虚拟机的东西也写了,它的API复制就不用写了,完全没有技术含量,复制后插花罢了.
代码重放其实也不很复杂,绕点弯弯..

   
   
   
   
    ////////////////////////////////////////////////////
// XXXXX OEP查找脚本
// Written by hnhuqiong
// Email:hnhuqiong@126.com
// OS : Win XP SP1,OllyICE 1.10,ODbgScript v1.47
// Data: 2006-01-30
// NOTE:
//  晕死了,为什么我的脚本下内存写断点断不上.
//
// Thanks!:
//  OLLYICE (OLLYDBG patch V1.10 and HideOD plugin V0.13 by PEDIY )
//  ODbgScript plugin by E3
//  bbs.pediy.com(看雪学院)
////////////////////////////////////////////////////

initialization:                           //初始化
dbh
var cbase
var csize
var tmp
var oep

gmi eip,CODEBASE
mov cbase,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT

pretreatment:                            //预处理
   cmp $VERSION, "1.47"
         jb version_above_147
   msgyn "请设置忽略所有的中断,除了无效或者特权指令,继续?"
   cmp $RESULT,1
   je Start
   jmp end

Start:
  run  
  mov tmp,[esp+4]
  bp tmp
  esto tmp                             //过第一个SEH
  bc tmp
  
  run
  mov tmp,[esp+4]
  bp tmp                               //过第二个SEH
  esto tmp
  bc tmp

  gpa "VirtualAllocEx","Kernel32.dll"
  mov tmp,$RESULT
  bp tmp
  run
  run
  run                                //过三次
  bc tmp
  rtu
  
  gpa "LoadLibraryA","Kernel32.dll"
  mov tmp,$RESULT
  bp tmp
//  run
  run
  bc tmp
  rtu   
----------对不起大家了,后面的我ODbgScript 有问题,内存写断点变性....
  bpwm cbase,csize                  
  run
  bpmc
  

  mov tmp,eip
  add tmp,2
  go tmp
  
  mov tmp,esp
  add tmp,1C
  
  bphws tmp,"w"
  esto                           //求出OEP的AV
  bphwc
  
  sti
  
  bphws tmp,"w"
  esto                           //加上段地址,得出RAV   
  bphwc

  mov tmp,esp
  add tmp,8
  mov tmp,[tmp]
  bp tmp
  esto
  bc tmp
   
end:
ret            // 结束脚本

/////////////////////////
//一些判断和提示信息
////////////////////////
  version_above_147:
   msg "请下载最新的ODbgScript 1.47以上版本,Script by hnhuqiong,Thank you for using my script!"
   jmp end

  error_all:
       msg "错误,请联系脚本作者hnhuqiong@126.com"
       jmp end
  error_bpint:
       msg "断点错误,请联系脚本作者hnhuqiong@126.com"
       jmp end
  error_function:
       msg "查找不到函数地址,请联系脚本作者hnhuqiong@126.com!"
       jmp end
  errror_bpint:
       msg "查找不到断点,请联系脚本作者hnhuqiong@126.com"
       jmp end
   
//////////////////结束//////////////////////////////  

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 236
活跃值: (100)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
虽然看不懂,先顶了,再学习
2006-5-16 07:27
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
原来的特色是驱动,现在的则是VM.没有实际意义的ANTI,只有解码->花指令->解码->花指令........内存断点写不上好象是新增加的线程检测造成的
2006-5-16 08:01
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
最初由 hnhuqiong 发布
我的ODbgScript 1.47有问题,下内存写断点变成了内存读断点


以前我也遇到这问题,ODbgScript所有版本都有这bug:

bool OllyLang::DoBPWM(string args)
{
string ops[2];

if(!CreateOperands(args, ops, 2))
return false;

DWORD addr, size;
if(GetDWOpValue(ops[0], addr) && GetDWOpValue(ops[1], size))
{
Setmembreakpoint(MEMBP_READ | MEMBP_WRITE, addr, size);
return true;
}
return false;
}
2006-5-16 08:09
0
雪    币: 235
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
顶了,学习
2006-5-16 08:09
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
6
最初由 q3 watcher 发布
原来的特色是驱动,现在的则是VM.没有实际意义的ANTI,只有解码->花指令->解码->花指令........内存断点写不上好象是新增加的线程检测造成的


不是,手工下断点就好好的,脚本走不下去.
2006-5-16 08:19
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 hnhuqiong 发布
不是,手工下断点就好好的,脚本走不下去.


可以端点的,内存断点有线程检测。
2006-5-16 09:20
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
顶一下楼主,
2006-5-16 10:20
0
雪    币: 2506
活跃值: (1000)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
9
最初由 hnhuqiong 发布
Themida 初步研究(ANTI篇)


某些马甲靠themida来赚钱的,我很生气,搞技术就搞技术,骂人在论坛真恶心.刚好200篇水贴,凑一篇水贴作为纪念.

........

hnhuqiong 很生气,后果很严重
2006-5-16 10:55
0
雪    币: 208
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
虽然还没开始研究这个壳,但还是先顶一下,为将来学习做准备。
2006-5-16 11:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习,谢谢。
2006-5-16 11:21
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 hnhuqiong 发布
不是,手工下断点就好好的,脚本走不下去.

可能是我理解错误,我跟踪时候发现有线程检测内存断点,还以为是这个原因呢.
2006-5-16 11:39
0
雪    币: 223
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
期待继续
2006-5-16 12:21
0
雪    币: 214
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
期待虚拟机分析
2006-5-16 13:02
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
15
乌鸦?噪 死神驾到
2006-5-16 14:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 Themida 发布
乌鸦?噪 死神驾到


BS
2006-5-16 14:24
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
好文  谢谢分享  
2006-5-16 21:14
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
18
sustain!
2006-5-16 22:41
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
19
最初由 kanxue 发布
以前我也遇到这问题,ODbgScript所有版本都有这bug:

Setmembreakpoint(MEMBP_READ | MEMBP_WRITE, addr, size);





想重新编译它,死活编译通不过,这个插件搞的什么东东????
这个作者也犯的错误估计是把这句当成了内存读写断点来弄了!

谁编译通过了这个插件告诉我一下,我不想重头看这个插件的代码了.
2006-5-16 22:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
牛人啊~学习!
2006-5-16 23:11
0
雪    币: 203
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
附件上传是不是出问题了,这里的附件也是0KB
2006-5-17 17:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
:)
2006-8-6 05:18
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
Themida
2006-8-6 08:25
0
雪    币: 127
活跃值: (1765)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
先顶了,再学习
2006-8-6 10:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
研究研究研究
2006-8-8 07:15
0
游客
登录 | 注册 方可回帖
返回
//