首页
论坛
课程
招聘
[Anti Virus专题]1.2 - 3.hash扫描获得api函数地址
2009-4-13 23:34 31412

[Anti Virus专题]1.2 - 3.hash扫描获得api函数地址

2009-4-13 23:34
31412
收藏
点赞0
打赏
分享
最新回复 (55)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
imaker 活跃值 2009-4-16 13:50
26
0
为了看懂楼主的代码,我正在学FASM.

楼主请继续,速度其次,保证质量.
雪    币: 324
活跃值: 活跃值 (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
likunkun 活跃值 1 2009-4-16 17:32
27
0
xfish是做什么工作的呀....,我很好奇
雪    币: 266
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
xfish 活跃值 5 2009-4-16 21:14
28
0
例子太多了,国外的很多病毒木马用的正是我这篇文章的字符串hash。



呵呵。感谢支持,一定保质。



呵呵,每天昏天黑的劳动者——程序员。
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
starhust 活跃值 2009-4-22 12:17
29
0
渐渐明白了
当然顶一个
雪    币: 104
活跃值: 活跃值 (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
刘国华 活跃值 2009-4-26 19:45
30
0
好漂亮的代码风格……喜欢
雪    币: 101
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一转身 活跃值 2009-4-29 21:54
31
0
膜拜.......
雪    币: 110
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zyfnhct 活跃值 2009-5-7 19:22
32
0
辛苦了。先顶一下,下下来慢慢看
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
爱转角 活跃值 2009-5-8 07:55
33
0
多谢,学习```
雪    币: 111
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JwLee 活跃值 2009-5-13 14:33
34
0
弱弱的问一下 @pushsz 这个宏的作用是什么?
雪    币: 30
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zephr 活跃值 2009-5-16 19:36
35
0
不错 谢谢啦
雪    币: 30
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zephr 活跃值 2009-5-23 21:36
36
0
看看 不错的说
雪    币: 133
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaoqing 活跃值 2009-5-24 11:05
37
0
楼主啊,这里有错误啊
当用fasm编译
.text
时,报:illegal instruction啊
雪    币: 133
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaoqing 活跃值 2009-5-24 11:15
38
0
好多错误啊
pushsz "dll"
都有错误
雪    币: 266
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
xfish 活跃值 5 2009-5-24 14:55
39
0
@pushsz是我的一个宏,用于压入构造字符串地址。

call   @f
  db 'dll', 0
@@:

macro @pushsz argc{
       
  local .string
   forward       
    if ~ argc eq
    if argc eqtype ''
      call     .string   
        db             argc, 0
        .string:
      else
         push  argc
                 
      end if
   end if
        }
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
myabc 活跃值 2009-5-30 23:22
40
0
第一次在看雪发言!
   由于毕业论文的关系,和楼主做了同样的事情。用ror对字符串加密!不过我从metasploit上得到的相应汇编代码(http://metasploit.com/shellcode/windows/).该网页上,其他几个工具也是用相同的办法来加密函数名称的。希望楼主是这个方法的原始创始人,而且极为凑巧,您文章的也提到了用ror移动13次, 该网页上也是用这样的方式,源代码是"ror edi, 13"。期望国内多出这样的牛人吧!!!!!
   这里也用python代码演示下整个加密过程,只需要在恰当的位置打印出相应变量的值,就可以看见整个字符串的加密变化的过程。 过程不复杂,但因为移位操作会让数据变长,每加密一次,只取最后8个字,下面代码中的"temp[-9:-1]"的切片就是完成该动作。
------------------------------------------------------------------------------------------------
#!/usr/bin/python

import sys
number1=1
while 1:
    print '##-----------------------------------------------##'
    FuncName=raw_input('Input the Function name :')
    hashsum=0
    StringLen=len(FuncName)
    RunNum=0
    for i,ch in enumerate(FuncName):
    print '----------------------------------'
        a=ord(ch)
        hashsum=a+hashsum
        hashsumTemp=hashsum
        hashsum1=hashsum>>13
        hashsum2=hashsum<<19
        hashsum=hashsum1+hashsum2
        temp=hex(hashsum)
        if len(temp) > 10 :
            temp1=temp[-9:-1]
            temp2='0x'
            temp3=temp2+temp1
            hashsum=int(temp3,16)
        print 'This is the correct hash-pice:',hex(hashsum)
    print '----------------------------------'
    print
    fin=hex(hashsumTemp)
    print 'The Function-hash result is :',fin
    print '##-----------------------------------------------##'
    print '[1] Do Once Again'
    print '[2] Exit'
    number1=raw_input('Input the number to select :')
    if number1!='2':
        pass
    else:
        sys.exit()
------------------------------------------------------------------------------------------------
雪    币: 133
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaoqing 活跃值 2009-5-31 23:47
41
0
老大啊,你的自已使用的fasm什么时候可以发上来啊,

只有用你的才能编译程序啊
雪    币: 133
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gaoqing 活跃值 2009-6-2 18:12
42
0
老大啊,你能不能发到我的邮箱中啊,
没有你的编译器,
我完全无法学习你的教程啊,

如果那样,你教程不白写了,哈哈

我的邮箱:chanchanyuan@163.com
雪    币: 116
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bswdylwsw 活跃值 2009-6-11 11:42
43
0
都是有分量,的代码。。。崇拜。努力。继续努力,加油
雪    币: 27
活跃值: 活跃值 (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZSYL 活跃值 2009-6-17 22:14
44
0
这个有点深了...
雪    币: 66
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
potal 活跃值 2009-6-18 01:29
45
0
这个方法好,学习了!
雪    币: 172
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangshen 活跃值 2009-6-22 00:13
46
0
强..学习了..
雪    币: 234
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
siwen 活跃值 2009-6-26 15:24
47
0
花了很大的精力啊。赞LZ!
雪    币: 533
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
凉风 活跃值 2009-6-29 16:32
48
0
RtlZeroMemory 好象hash找不到,鱼小姐看看
雪    币: 241
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
RYYMike 活跃值 2 2009-6-30 16:48
49
0
我觉得这是一定存在重复的问题的吧,因为多字节进行缩小,8个字节的字符串的种数肯定是多于4个字节的种数,所以就造成一对多,所以,一定存在重复的问题,有多个字符串会对应到一个字符串。不知LZ怎么看?
雪    币: 83
活跃值: 活跃值 (10)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 活跃值 4 2009-10-20 15:15
50
0
GetApi:
  pop   edx
  pop  eax      ;hModule
  pop  ecx      ;lpApiString
  push  edx  
  pushad
  mov  ebx, eax    ;hModule  ebx
  mov  edi, ecx    ;lpApiString  edi  
  xor  al, al       ;al清零
  .Scasb:
  scasb           ;SCASB指令将AL中的值同目标内存中的字节比较,目标内存数据是由ES:DI寻址,

;如果找到了该字符,DI指向匹配字符串后面的一个字符.

  jnz  .Scasb               ;继续搜索
  dec  edi            
  sub  edi, ecx              ;这两句实现获得lpApiString的地址
  xchg  edi, ecx    ; edi = lpApiString, ecx = ApiLen
  
  mov  eax, [ebx+3ch]      ;
  mov  esi, [ebx+eax+78h]  ;Get Export Rva
  lea  esi, [esi+ebx+IMAGE_EXPORT_DIRECTORY.NumberOfNames]
  lodsd
  xchg  eax, edx    ; edx = NumberOfNames
  lodsd
  push  eax      ; +4获得[esp] = AddressOfFunctions
  lodsd
  xchg  eax, ebp  
  lodsd
  xchg  eax, ebp    ; ebp = AddressOfNameOrdinals, eax = AddressOfNames
  add  eax, ebx       ;hModule  ebx
  
  mov  [esp+4*6], edi    ;临时存储
  mov  [esp+4*5], ecx    ;临时存储

  .LoopScas:  
  dec  edx       ;循环 edx = NumberOfNames
  jz  .Ret
  mov  esi, [eax+edx*4]
  add  esi, ebx
  repz  cmpsb
  jz  .GetAddr
  mov  edi, [esp+4*6]   
  mov  ecx, [esp+4*5]   
  jmp  .LoopScas
  
  .GetAddr:
    shl  edx, 1;edx*2
    add  ebp, edx; ebp = AddressOfNameOrdinals
  movzx  eax, word [ebp+ebx];mov eax, [Ordinals_Tab + (索引值 *2)]
  shl  eax, 2;*4
  add  eax, [esp]
  mov  eax, [ebx+eax];mov eax, [AddressOfFunctions + (索引值*4)]
  add  eax, ebx
  .Ret:
    pop  ecx
    mov  [esp+4*7], eax
  popad
  ret

基础不好,这段看着头有点晕
游客
登录 | 注册 方可回帖
返回