首页
社区
课程
招聘
[Anti Virus专题]1.2 - 3.hash扫描获得api函数地址
发表于: 2009-4-13 23:34 35065

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

2009-4-13 23:34
35065
收藏
免费 7
支持
分享
最新回复 (55)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
为了看懂楼主的代码,我正在学FASM.

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



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



呵呵,每天昏天黑的劳动者——程序员。
2009-4-16 21:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
渐渐明白了
当然顶一个
2009-4-22 12:17
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
好漂亮的代码风格……喜欢
2009-4-26 19:45
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
膜拜.......
2009-4-29 21:54
0
雪    币: 124
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
32
辛苦了。先顶一下,下下来慢慢看
2009-5-7 19:22
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
多谢,学习```
2009-5-8 07:55
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
弱弱的问一下 @pushsz 这个宏的作用是什么?
2009-5-13 14:33
0
雪    币: 30
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
不错 谢谢啦
2009-5-16 19:36
0
雪    币: 30
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
看看 不错的说
2009-5-23 21:36
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
楼主啊,这里有错误啊
当用fasm编译
.text
时,报:illegal instruction啊
2009-5-24 11:05
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
好多错误啊
pushsz "dll"
都有错误
2009-5-24 11:15
0
雪    币: 315
活跃值: (23)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
39
@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
        }
2009-5-24 14:55
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
第一次在看雪发言!
   由于毕业论文的关系,和楼主做了同样的事情。用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()
------------------------------------------------------------------------------------------------
2009-5-30 23:22
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
老大啊,你的自已使用的fasm什么时候可以发上来啊,

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

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

我的邮箱:chanchanyuan@163.com
2009-6-2 18:12
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
都是有分量,的代码。。。崇拜。努力。继续努力,加油
2009-6-11 11:42
0
雪    币: 16
活跃值: (430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
这个有点深了...
2009-6-17 22:14
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
45
这个方法好,学习了!
2009-6-18 01:29
0
雪    币: 172
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
强..学习了..
2009-6-22 00:13
0
雪    币: 235
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
花了很大的精力啊。赞LZ!
2009-6-26 15:24
0
雪    币: 533
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
RtlZeroMemory 好象hash找不到,鱼小姐看看
2009-6-29 16:32
0
雪    币: 261
活跃值: (32)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
49
我觉得这是一定存在重复的问题的吧,因为多字节进行缩小,8个字节的字符串的种数肯定是多于4个字节的种数,所以就造成一对多,所以,一定存在重复的问题,有多个字符串会对应到一个字符串。不知LZ怎么看?
2009-6-30 16:48
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
50
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

基础不好,这段看着头有点晕
2009-10-20 15:15
0
游客
登录 | 注册 方可回帖
返回
//