首页
社区
课程
招聘
[原创]ThemidaScript for 1.9.10+
发表于: 2007-8-14 17:08 27393

[原创]ThemidaScript for 1.9.10+

2007-8-14 17:08
27393
收藏
免费 7
支持
分享
最新回复 (63)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
强人!谢谢,收下了
2007-9-6 13:09
0
雪    币: 216
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
27
绝对收藏,感谢楼主
2007-9-6 17:25
0
雪    币: 16
活跃值: (515)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
多谢...支持LZ
2007-9-11 22:35
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
运行错误,出现如下提示:
上传的附件:
2007-9-15 08:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
测试 我用不起来
2007-9-21 11:41
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
31
努力学习中...
2007-10-5 21:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
感激涕零,谢谢fxyang兄!
2007-10-9 19:36
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
33
用看雪上面提供的最新的OD试一下,可以的。
测试过了,确实可以脱。
2007-10-9 19:53
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
34
1,查不出壳的,请下载最新的Peid的userdb,就可以了。
2,Find debuger 的,下载看雪工具下载的最新的OD,最新的版本专门对themida修改了一下。
3,出现jb odbgver的,下载最新的OdbgScript。
楼主提供的脚本确实可以用,我测试通过。十分感谢。
2007-10-9 19:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
晕,不行,总是跑飞!!!!
2007-10-10 23:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
楼主辛苦拉 致谢!!!!!
2007-10-11 04:10
0
雪    币: 255
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
再顶一次
能看懂,脚本了
呵呵
2007-10-14 01:18
0
雪    币: 243
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
38
根据楼主的脚本(先感谢楼主的分享),对比两不同版本加壳程序:
首先:两不同程序版本为Themida|WinLicense V1.9.x.x以上加的壳(只是估计,因为只能用OllyDBG.eXe V1.9.10+.0.4分析),我把楼主的脚本中加入 msg "暂时断在这!"   ,以方便对比两不同版本的加壳,具体看我加入的提示:
/////////////////////////////////////////
/// by fxyang                         ///
/// version  0.4                      ///
/// 感谢 fly 的建议,海风月影 测试    ///
/////////////////////////////////////////
data:
var cbase
var csize
var dllimg
var dllsize
var mem
var getprocadd
var gatprocadd_2
var tmp
var temp

cmp $VERSION, "1.52"
jb odbgver

bphwcall
bpmc
gmi eip,CODEBASE
mov cbase,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT
gmemi eip,MEMORYBASE      //壳段的基地址
mov dllimg,$RESULT
log dllimg
gmemi eip,MEMORYSIZE      //壳段的长度
mov dllsize,$RESULT
log dllsize

findapibase:
gpa "GetProcAddress", "kernel32.dll"
mov getprocadd,$RESULT                   //取GetProcAddress函数地址,用于定位加密表
cmp getprocadd,0
gpa "_lclose","kernel32.dll"             //同上  
mov getprocadd_2,$RESULT
gpa "GetLocalTime", "kernel32.dll"       //下面代码取自okdodo 感谢 okdodo
mov tmpbp,$RESULT
cmp tmpbp,0
je stop
bphws tmpbp ,"x"
esto
bphwc tmpbp
rtu
gpa "VirtualAlloc", "kernel32.dll"
mov tmpbp,$RESULT
cmp tmpbp,0
je stop
bphws tmpbp ,"x"
esto
bphwc tmpbp
rtu
mov apibase,eax
log apibase
gpa "LoadLibraryA", "kernel32.dll"
mov tmpbp,$RESULT
cmp tmpbp,0
je stop
bphws tmpbp ,"x"
esto

bphwc tmpbp
rtu
findVirtualAlloc:
find apibase,#558BECFF7514FF7510FF750CFF75086AFFE8090000005DC21000#     //查找被虚拟的VirtualAlloc函数
mov tmpbp,$RESULT
cmp tmpbp,0
je win2003
bphws tmpbp ,"x"
jmp tmploop

win2003:
find apibase,#558BECFF7514FF7510FF750CFF75086AFFE878FFFFFF5DC21000#
mov tmpbp,$RESULT
cmp tmpbp,0
je stop
bphws tmpbp ,"x"

tmploop:
                               //下面代码重新改写
esto
cmp eax,getprocadd                       //定位加密表出现时机
je iatbegin
cmp eax,getprocadd_2
je iatbegin
jne tmploop

iatbegin:
esto
esto

bphwcall
rtr
sti
sti
find eip, #8BB5??????09#
mov tmpbp,$RESULT
cmp tmpbp,0
jne next1
find eip, #8BB5??????06#
mov tmpbp,$RESULT
cmp tmpbp,0
je findnext_1
next1:
bphws tmpbp ,"x"
esto
msg "暂时断在这!"                           //我加在这里
sti
var iatcalltop      //加密表的首地址
var iatcallend
mov iatcalltop,esi
find iatcalltop,#00000000#
mov iatcallend,$RESULT
log iatcallend
var iatfn
var iattop
var codeadd
var antiadd
bphwcall
jmp codebegin

findnext_1:
sti
find dllimg, #FFFFFFFFDDDDDDDD#
mov tmpbp,$RESULT
cmp tmpbp,0
je notlb

var iatcalltop      //加密表的首地址
var iatcallend
mov iatcalltop,$RESULT
sub iatcalltop,10
log iatcalltop
find iatcalltop,#00000000#
mov iatcallend,$RESULT
log iatcallend
var iatfn
var iattop
var codeadd
var antiadd
mov tmp,eax
mov eax,iatcalltop
mov eax,[eax]
shr eax,10
cmp ax,0
jne iatbegin_2
add iatcalltop,04
iatbegin_2:
mov eax,tmp

codebegin:
bphws iatcalltop,"r"
esto

bphwcall
find eip,#83BD????????01#
bphws $RESULT ,"x"
mov antiadd,$RESULT
esto

sti
bphwcall
mov temp,eip
mov [temp],#909090909090#
mov tmp,0
loop1:
find eip,#3B8D????????0F84#,100
bphws $RESULT ,"x"
esto

bphwcall
mov iatfn,eax        //获得函数,并修改magic jump
log iatfn
sti
mov temp,eip
mov [temp],#909090909090#
inc tmp
cmp tmp,03
je next_1
jmp loop1

next_1:
add iatcalltop,04
bphws iatcalltop,"r"
esto

bphwcall
findiataddpro:               //iataddress
find eip,#0385????????#,100
bphws $RESULT,"x"
esto

sti
bphwcall
mov iattop,eax         //此时EAX是iat表中函数写入地址,然后判断这个值最小时就是iat基地址
log iattop
mov iatcalltop,esi
bphws antiadd,"r"
esto

find eip,#3985??????0?0F84#,
mov temp, $RESULT
bphws temp,"x"
esto

bphwcall
sti
mov temp,eip
mov [temp],#90E9#        //处理效验
log temp
sub iatcallend,04
bphws iatcallend,"w"
esto

sti
sti
mov tmp,cbase
add tmp,csize

loopoep:
bprm cbase,csize
esto
bpmc

cmp tmp,eip
ja findoep
jmp loopoep

findoep:
exec
pushad
pushfd
ende

mov ecx,cbase
add csize,cbase
mov edx,csize
var iatadd
mov iatadd,iattop
loopiatadd:
sub iatadd,04
cmp [iatadd],0
je iataddbase
jmp loopiatadd
iataddbase:
mov iattop,iatadd
sub iattop,04
cmp [iattop],0
je findiatbase
jmp loopiatadd
findiatbase:

add iatadd,04
mov ebx,iatadd
log iatadd
mov [iatcalltop],#8A013CE89074273CE97423668B01663DFF157477663DFF257471833900907503419090413BCA0F8FDE000000EBD2909090909090909090909090909090909090909090909090909090908B690103E983C5058BF3AD83F800750A833E009074C3909090903BE87402EBEA8079FF9075218039E9750866C741FFFF25EB0666C741FFFF1583EE04897101EB2190EB269090908039E9750866C701FF2590EB0566C701FF159083EE04897102909083C104E96FFFFFFF908B690203E983C5068BF3AD83F800750A833E00900F8454FFFFFF3BE87402EBEA8079FF907521668139FF15750866C741FFFF15EB0866C741FFFF2583EE04897101EB0A0000000083EE0489710283C104E919FFFFFF909090#
mov tmp,eip
log tmp
mov eip,iatcalltop
sti
mov temp,iatcalltop
add temp,010c
bphws temp,"x"
esto

bphwcall
mov eip,tmp
bp eip

exec
popfd
popad
ende
bc eip

msg "脚本执行完成,iat表修复完成,现在停在伪OEP,请修复代码!"
eval "IAT基地址在:{iatadd}"
msg $RESULT
ret

notlb:
msg "没有加密表,可能是以前版本!"
pause

stop:

msg "可能是旧版本"
pause

运行后对比如下
第一个程序的:
012AFBA3     FF95 B9279406      call dword ptr ss:[ebp+69427B9]
012AFBA9     F9                 stc
012AFBAA     8985 A5229406      mov dword ptr ss:[ebp+69422A5],eax
012AFBB0     F8                 clc
012AFBB1     F9                 stc
012AFBB2     8BB5 99349406      mov esi,dword ptr ss:[ebp+6943499]    ; JAF.011E8940    //断在这里
012AFBB8     E9 0F000000        jmp 012AFBCC                          ; JAF.012AFBCC
012AFBBD     138F B6E17FAA      adc ecx,dword ptr ds:[edi+AA7FE1B6]
012AFBC3     46                 inc esi
012AFBC4     59                 pop ecx
012AFBC5     C2 362F            retn 2F36
012AFBC8     D6                 salc
012AFBC9     3D BF8F8B9D        cmp eax,9D8B8FBF
012AFBCE     2113               and dword ptr ds:[ebx],edx            ;

ntdll.KiFastSystemCallRet
012AFBD0     94                 xchg eax,esp
012AFBD1     06                 push es
012AFBD2     E9 0B000000        jmp 012AFBE2                          ; JAF.012AFBE2
012AFBD7     3D 2F57189A        cmp eax,9A18572F
012AFBDC     0F26               ???                                   ; Unknown

command
012AFBDE     D9DC               fstp esp                              ; Illegal use

of register
012AFBE0     3875 89            cmp byte ptr ss:[ebp-77],dh
012AFBE3     B5 39              mov ch,39
012AFBE5     329406 0F821900    xor dl,byte ptr ds:[esi+eax+19820F]
012AFBEC     0000               add byte ptr ds:[eax],al
012AFBEE     E9 14000000        jmp 012AFC07                          ; JAF.012AFC07
012AFBF3     37                 aaa
012AFBF4   ^ 74 86              je short 012AFB7C                     ; JAF.012AFB7C
012AFBF6     1AFE               sbb bh,dh
012AFBF8     F2:                prefix repne:
012AFBF9   ^ E3 B4              jecxz short 012AFBAF                  ; JAF.012AFBAF
012AFBFB     7A 5F              jpe short 012AFC5C                    ; JAF.012AFC5C
012AFBFD     1812               sbb byte ptr ds:[edx],dl
012AFBFF     A3 7FFCBA2E        mov dword ptr ds:[2EBAFC7F],eax
012AFC04     C2 050E            retn 0E05

另一程序的:
00889F4F     FF95 7D169606      call dword ptr ss:[ebp+696167D]
00889F55     E9 10000000        jmp 00889F6A                          
00889F5A     135E 4F            adc ebx,dword ptr ds:[esi+4F]
00889F5D     B2 82              mov dl,82
00889F5F     FA                 cli
00889F60     CC                 int3
00889F61     55                 push ebp
00889F62     17                 pop ss
00889F63     16                 push ss
00889F64     BF 2EED2B01        mov edi,12BED2E
00889F69     B3 89              mov bl,89
00889F6B     8535 319606F9      test dword ptr ds:[F9069631],esi
00889F71     8BB5 951F9606      mov esi,dword ptr ss:[ebp+6961F95]   
//断在这里

00889F77     60                 pushad
00889F78     81C8 A7742A62      or eax,622A74A7
00889F7E     61                 popad
00889F7F     8B9D 75299606      mov ebx,dword ptr ss:[ebp+6962975]
00889F85     60                 pushad
00889F86     E9 09000000        jmp 00889F94                        
00889F8B     F3:                prefix rep:
00889F8C     8813               mov byte ptr ds:[ebx],dl
00889F8E     95                 xchg eax,ebp
00889F8F     5C                 pop esp
00889F90     AA                 stos byte ptr es:[edi]
00889F91     E5 8C              in eax,8C
00889F93     07                 pop es
00889F94     F5                 cmc
00889F95     61                 popad
00889F96     89B5 BD159606      mov dword ptr ss:[ebp+69615BD],esi
00889F9C     F5                 cmc
00889F9D     899D 112E9606      mov dword ptr ss:[ebp+6962E11],ebx   
00889FA3     F9                 stc
00889FA4     8B9D 75299606      mov ebx,dword ptr ss:[ebp+6962975]
00889FAA     0F84 0C000000      je 00889FBC                        
00889FB0     0F83 06000000      jnb 00889FBC                          
00889FB6     0F8A 00000000      jpe 00889FBC                          
      通过上面的对比不难看出它们的不同地方了,而实际上脚本运行结束后第二个程序能完全跑完,但第一个程序就出错了。
另外,我把 msg "暂时断在这!" 加入到如下
…………………………
sti
bphwcall
mov temp,eip
mov [temp],#909090909090#
mov tmp,0
loop1:
find eip,#3B8D????????0F84#,100
bphws $RESULT ,"x"
esto
msg "暂时断在这!"
bphwcall
mov iatfn,eax        //获得函数,并修改magic jump
log iatfn
sti
mov temp,eip
mov [temp],#909090909090#
inc tmp
cmp tmp,03
je next_1
jmp loop1
……………………
第二个程序能顺利的NOP,但第一程序在第一次nop后,就终止程序了,从上面对比后,我只能估计有可能两程序用同一版本加壳工具加壳,只是不同的方式而以;也有可能两程序用的根本就不是同一版本的。
这只是本人的,对比的思路,而实际上,可能已经有高手把查壳特征已经分析出来了,只是没公布罢了,也请路过的朋友,自己发表自己的见解!!!
2007-10-21 10:43
0
雪    币: 2199
活跃值: (2010)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
39
tmd 的版本问题,1.9.3以上的不能用这个脚本
2007-10-21 13:10
0
雪    币: 243
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
40
感谢fxyang兄的回复,你把1.9.3以上的脚本也分布一下好了!呵呵
2007-10-21 15:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
支持下,感谢楼主哦~
2007-10-23 09:32
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
42
收藏之,绝不放过任何好东东
2007-10-28 12:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
下来测试看看
2007-10-28 21:55
0
雪    币: 400
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
收藏了好东东
2007-10-29 00:42
0
雪    币: 147
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
真是好东西,可以跑下来了了
2007-10-29 09:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
找的就是他  累死了  手脱太累
2007-11-2 10:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gui
47
提示时就版本是什么意思 啊?
2007-11-6 17:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
怎么才能让OD跑起来呢
2007-11-7 10:14
0
雪    币: 124
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
49
0040338F    68 C4834300        PUSH 004383C4                            ; ASCII "%s%s"
00403394    E8 B74A0000        CALL 00407E50
00403399    83C4 0C            ADD ESP,0C
0040339C    8D4C24 10          LEA ECX,[ESP+10]
004033A0    8D5424 34          LEA EDX,[ESP+34]
004033A4    51                 PUSH ECX

0040338F    68 C4834300          PUSH 004383C4                            ; ASCII "%s%s"
00403394    FF15 BCD54200        CALL [42D5BC]                            ; dumped_.00407E50
0040339A    C40C8D 4C24108D      LES ECX,[ECX*4+8D10244C]                 ; Modification of segment register
004033A1    54                   PUSH ESP
004033A2    24 34                AND AL,34
004033A4    51                   PUSH ECX

为什么会这样呢
2007-11-10 22:00
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
这么好的东西一定要收藏啊.谢谢楼主啊!!
2007-12-17 22:36
0
游客
登录 | 注册 方可回帖
返回