精华内容
下载资源
问答
  • 分析shellcode时,静态分析或者使用scdbg模拟分析都不够准确,如果转换成exe文件那么就可以用debugger或者IDA分析,会方便很多。 样本分析 这里以CVE-2013-3346 的样本为例,使用peepdf分析样本: $ python ...

    前言

    在分析shellcode时,静态分析或者使用scdbg模拟分析都不够准确,如果转换成exe文件那么就可以用debugger或者IDA分析,会方便很多。

    样本分析

    这里以CVE-2013-3346
    的样本为例,使用peepdf分析样本:

    $ python peepdf.py -i -f ~/Downloads/sample.pdf                                                                                                                                                
    
    File: sample.pdf
    
    MD5: 6776bda19a3a8ed4c2870c34279dbaa9
    
    SHA1: ad6a3564e125683a791ee98c5d1e66e1d9c6877d
    
    Size: 177511 bytes
    
    Version: 1.1
    
    Binary: False
    
    Linearized: False
    
    Encrypted: False
    
    Updates: 0
    
    Objects: 4
    
    Streams: 2
    
    Comments: 0
    
    Errors: 1
    
    Version 0:
    
    Catalog: 1
    
    Info: No
    
    Objects (4): [1, 2, 3, 10]
    
    Errors (1): [3]
    
    Streams (2): [10, 3]
    
    Encoded (0): []
    
    Objects with JS code (1): [3]
    
    Suspicious elements:
    
    /AcroForm: [1]
    
    /OpenAction: [1]
    
    /XFA: [1]
    
    /JS: [2]
    
    /JavaScript: [2]
    

    其中Objects with JS code (1): [3]可知对象3是一段js代码:

    PPDF> object 3
    
    << >>
    
    stream
    
    if(app.media.getPlayers().length >= 1) Q=~[];Q={___:++Q,$$$$:(![]+"")[Q],__$:++Q,$_$_:(![]+"")[Q],_$_:++Q,$_$$:({}+"")[Q],$$_$:(Q[Q]+"")[Q],_$$:++Q,$$$_:(!""+"")[Q],$__:++Q,$_$:++Q,$$__:({}+"")[Q],$$_:++Q,$$$:++Q,$___:++Q,$__$:++Q};Q.$_=(Q.$_=Q+"")[Q.$_$]+(Q._$=Q.$_[Q.__$])+(Q.$$=(Q.$+"")[Q.__$])+((!Q)+"")[Q._$$]+(Q.__=Q.$_[Q.$$_])+(Q.$=(!""+"")[Q.__$])+(Q._=(!""+"")[Q._$_])+Q.$_[Q.$_$]+Q.__+Q._$+Q.$;Q.$$=Q.$+(!""+"")[Q._$$]+Q.__+Q._+Q.$+Q.$$;Q.$=(Q.___)[Q.$_][Q.$_];Q.$(Q.$(Q.$$+"\""+"\\"+Q.__$+Q.$$_+Q.$$_+Q.$_$_+"\\"+Q.__$+Q.$$_+Q._$_+"\\"+Q.$__+Q.___+"\\"+Q.__$+Q.$$_+Q._$$+"\\"+Q.__$+Q.$_$+Q.___+Q.$$$_+(![]+"")[Q._$_]+(![]+"")[Q._$_]+Q.$$__+Q._$+Q.$$_$+Q.$$$_+"\\"+Q.$__+Q.___+"=\\"+Q.$__+Q.___+Q._+"\\"+Q.__$+Q.$_$+Q.$$_+Q.$$$_+"\\"+Q.__$+Q.$$_+Q._$$+Q.$$__+Q.$_$_+"\\"+Q.__$+Q.$$_+Q.___+Q.$$$_+"(\\\"%"+Q._+Q.___+Q.
    
    ...
    

    这里要把从Q=~[]开始的加密代码拷贝到文件中。

    这里的代码是用jjencode加密过的,使用peepdf自带的解密工具可以还原出js代码:

    PPDF> js_jjdecode file /Users/seviezhou/Downloads/sample.js $> jsdecode
    
    PPDF> js_analyse variable jsdecode $> shellcode
    
    PPDF> show jsdecode
    
    var shellcode = unescape("%u\00E8%u\0000%u\5D00%u\ED83%u\E905%u\008B%u\0000%u\5052%u\D231%u\C031%u\F980%u\7501%u\6604%u\EBAD%u\AC01%u\003C%u\0D74%u\613C%u\0272%u\202C%u\CAC1%u\010D%u\EBC2%u\39E3%u...
    
    var executable = "";
    
    var rop9 = "";
    
    rop9 += unescape("%u\313d%u\4a82");
    
    rop9 += unescape("%u\a713%u\4a82");
    
    rop9 += unescape("%u\1f90%u\4a80");
    
    ...
    
    ...
    
    PPDF> show shellcode
    
    e8 00 00 00 00 5d 83 ed 05 e9 8b 00 00 00 52 50   |.....]........RP|
    
    31 d2 31 c0 80 f9 01 75 04 66 ad eb 01 ac 3c 00   |1.1....u.f....<.|
    
    74 0d 3c 61 72 02 2c 20 c1 ca 0d 01 c2 eb e3 39   |t.<ar., .......9|
    
    da 58 5a c3 56 89 da b2 3c 31 c0 66 8b 02 01 d8   |.XZ.V...<1.f....|
    
    8b 50 78 01 da 52 51 8b 4a 18 8b 42 20 01 d8 8b   |.Px..RQ.J..B ...|
    
    38 01 df 53 8b 1e 87 f7 51 31 c9 e8 ae ff ff ff   |8..S....Q1......|
    
    59 5b 87 f7 75 02 eb 08 83 c0 04 49 e3 22 eb df   |Y[..u......I."..|
    
    8b 42 18 29 c8 89 c1 8b 42 24 01 d8 66 8b 0c 48   |.B.)....B$..f..H|
    
    8b 42 1c 01 d8 c1 e1 02 01 c8 8b 00 01 d8 89 06   |.B..............|
    
    59 5a 83 c6 04 e2 ae 5e c3 31 d2 64 8b 52 30 8b   |YZ.....^.1.d.R0.|
    
    ...
    

    js代码主要是shellcode的布置和堆喷射还有rop的构造,这里的shellcode利用CVE-2013-5065绕过了沙箱。将shellcode提取出来使用scdbg分析得到如下结果:

    ...
    
    401215  SetFilePointer(hFile=1a4, dist=0, 0, FILE_BEGIN) = 0
    
    401221  GetFileSize(1a4, 0) = ffffffff
    
    401215  SetFilePointer(hFile=1a8, dist=0, 0, FILE_BEGIN) = 0
    
    401221  GetFileSize(1a8, 0) = ffffffff
    
    401215  SetFilePointer(hFile=1ac, dist=0, 0, FILE_BEGIN) = 0
    
    401221  GetFileSize(1ac, 0) = ffffffff
    
    401215  SetFilePointer(hFile=1b0, dist=0, 0, FILE_BEGIN) = 0
    
    401221  GetFileSize(1b0, 0) = ffffffff
    
    401215  SetFilePointer(hFile=1b4, dist=0, 0, FILE_BEGIN) = 0
    
    401221  GetFileSize(1b4, 0) = ffffffff
    
    401221   83F8FF                          cmp eax,0xffffffff              step: 1647274  foffset: 221
    
    eax=ffffffff  ecx=0         edx=12fdbc    ebx=1b4
    
    esp=12fdb0    ebp=2000      esi=12fdc8    edi=12fdb4     EFL 44 P Z
    
    dbg> Disassemble address (default eip): (hex/reg) 0x401221
    
    401221
    
    Number of instructions to dump (max 100): (int/reg) 100
    
    100
    
    401221   83F8FF                          cmp eax,0xffffffff
    
    401224   74E3                            jz 0x401209   ^^
    
    401226   3D00100000                      cmp eax,0x1000
    
    40122b   7CDC                            jl 0x401209   ^^
    
    40122d   89C5                            mov ebp,eax
    
    40122f   89E0                            mov eax,esp
    
    401231   31C9                            xor ecx,ecx
    
    401233   51                              push ecx
    
    401234   50                              push eax
    
    401235   6A04                            push byte 0x4
    
    401237   57                              push edi
    
    401238   53                              push ebx
    
    401239   FF5630                          call [esi+0x30]
    
    40123c   813F25504446                    cmp dword [edi],0x46445025
    
    401242   75C5                            jnz 0x401209   ^^
    
    401244   83C408                          add esp,0x8
    
    ...
    
    dbg> Set eip (VA or file offset) : (hex/reg) 0x401244
    
    401244
    
    401244   83C408                          add esp,0x8
    
    dbg>
    
    40125a  VirtualAlloc(base=0 , sz=1ffc) = 731000
    
    401265  ReadFile(hFile=1b4, buf=731000, numBytes=1ffc) = 0
    
    4012b0  GetTempPathA(len=c8, buf=12fcfc) = 25
    
    4012be  GetTempFileNameA(path=C:\Users\SEVIEZ~1\AppData\Local\Temp\, prefix=12fcf8, unique=0, buf=12f
    
    cfc) = 429E
    
             Path = C:\Users\SEVIEZ~1\AppData\Local\Temp\429E.tmp
    
    4012e0  CreateFileA(C:\Users\SEVIEZ~1\AppData\Local\Temp\429E.tmp) = 8
    
    SafeMalloc Failed/refused to allocate 0x0 bytes exiting...
    

    一开始分析就会陷入一个死循环,然后尝试改变eip得到了一些api的调用。

    转换shellcode为exe

    还是看不出什么,这里我们把shellcode转换成exe文件来分析,首先我尝试了shellcode2exe.py,可转换结果并不是一个合法的exe文件,这里讲一个通用的方法,这里要用到yasm.exegolink.exe,下载地址:

    yasm-1.3.0-win64.exe

    yasm-1.3.0-win32.exe

    golink

    下载对应位数的yasmgolink,分别重命名为yasm.exegolink.exe

    然后用winhex等十六进制编辑器把shellcode保存为shellcode.bin:

    $ hexdump shellcode.bin
    
    0000000 e8 00 00 00 00 5d 83 ed 05 e9 8b 00 00 00 52 50
    
    0000010 31 d2 31 c0 80 f9 01 75 04 66 ad eb 01 ac 3c 00
    
    0000020 74 0d 3c 61 72 02 2c 20 c1 ca 0d 01 c2 eb e3 39
    
    0000030 da 58 5a c3 56 89 da b2 3c 31 c0 66 8b 02 01 d8
    
    0000040 8b 50 78 01 da 52 51 8b 4a 18 8b 42 20 01 d8 8b
    
    ...
    

    然后新建一个文件shellcode.asm,内容如下:

    $ cat shellcode.asm
    
    Global Start
    
    SECTION 'foo' write, execute,read
    
    Start:
    
    incbin "shellcode.bin"
    

    最后把yasm.exegolink.exeshellcode.asmshellcode.bin放在同一个目录下,以32位系统为例,依次执行如下命令:

    yasm.exe -f win32 -o shellcode.obj shellcode.asm
    
    golink /ni /entry Start shellcode.obj
    

    最后可以得到shellcode.exe:

    C:\Users\seviezhou\Desktop>yasm.exe -f win32 -o shellcode.obj shellcode.asm
    
    C:\Users\seviezhou\Desktop>golink /ni /entry Start shellcode.obj
    
    C:\Users\seviezhou\Desktop>dir shellcode.exe
    
     驱动器 C 中的卷没有标签。
    
     卷的序列号是 0A63-F3E0
    
     C:\Users\seviezhou\Desktop 的目录
    
    2017/11/02  20:18             2,048 shellcode.exe
    
                   1 个文件          2,048 字节
    
                   0 个目录 49,720,483,840 可用字节
    

    然后就可以放到debugger中调试:

    00401000 > $ E8 00000000    CALL shellcod.00401005                   ; \shellcod.00401005
    
    00401005   $ 5D             POP EBP
    
    00401006   . 83ED 05        SUB EBP,5
    
    00401009   . E9 8B000000    JMP shellcod.00401099
    
    0040100E  /$ 52             PUSH EDX
    
    0040100F  |. 50             PUSH EAX
    
    00401010  |. 31D2           XOR EDX,EDX
    
    00401012  |> 31C0           /XOR EAX,EAX
    

    可以看到入口点确实是shellcode的起始位置,单步跟随后可以在栈上找到程序使用的api:

    0012FF54   7685214F  kernel32.ExitProcess
    
    0012FF58   76852FB6  kernel32.VirtualAlloc
    
    0012FF5C   7684A629  kernel32.DeviceIoControl
    
    0012FF60   7684CEE8  RETURN to kernel32.CreateFileA
    
    0012FF64   7684CAC4  kernel32.GetCurrentProcessId
    
    0012FF68   7685395C  kernel32.LoadLibraryA
    
    0012FF6C   7688E5FD  kernel32.WinExec
    
    0012FF70   76851400  kernel32.WriteFile
    
    0012FF74   7684CA7C  kernel32.CloseHandle
    
    0012FF78   76866A65  kernel32.GetTempPathA
    
    0012FF7C   7686695F  kernel32.GetTempFileNameA
    
    0012FF80   76840273  kernel32.GetFileSize
    
    0012FF84   768496FB  kernel32.ReadFile
    
    0012FF88   7684DB36  kernel32.SetFilePointer
    

    然后就可以分析shellcode了,当然也可以放到IDA中分析。

    也可以把上述两条命令写成shellcode2exe.bat文件:

    @echo off
    
    @if "%1"=="" goto help
    
    @echo Global Start > shellcode.asm
    
    @echo SECTION 'foo' write, execute,read >> shellcode.asm
    
    @echo Start:       >> shellcode.asm
    
    @echo incbin "%2"  >> shellcode.asm
    
    @yasm.exe -f win%1 -o shellcode.obj shellcode.asm
    
    @golink /ni /entry Start shellcode.obj
    
    @dir shellcode.exe
    
    @goto exit
    
    @:help
    
    @echo Converts shellcode to exe
    
    @echo Required Arguments:
    
    @echo arg1 - architecture: 32 or 64 
    
    @echo arg2 - shellcode file name
    
    @echo current dir is %cd%
    
    @:exit
    
    echo.
    

    运行结果:

    C:\Users\seviezhou\Desktop>shellcode2exe.bat
    
    Converts shellcode to exe
    
    Required Arguments:
    
    arg1 - architecture: 32 or 64
    
    arg2 - shellcode file name
    
    current dir is C:\Users\seviezhou\Desktop
    
    C:\Users\seviezhou\Desktop>shellcode2exe.bat 32 shellcode.bin
    
     驱动器 C 中的卷没有标签。
    
     卷的序列号是 0A63-F3E0
    
     C:\Users\seviezhou\Desktop 的目录
    
    2017/11/02  20:26             2,048 shellcode.exe
    
                   1 个文件          2,048 字节
    
                   0 个目录 49,720,455,168 可用字节
    

    成功得到exe文件。

    总结

    当分析shellcode时,可以结合多种方法分析,静态或者动态,才能更好的分析代码的行为,这时能够转换成可执行文件分析就是很好的方法。

    展开全文
  • 如何解决wup.exe文件占用cpu资源

    千次阅读 2020-02-11 20:29:12
    如果你的电脑上出现有wup.exe文件占用CPU资源,那么你的电脑可能是中挖矿病毒了。 腾讯的分析 他会自动将他的目录添加到windows defender的扫描排除项 把他的这个排除项删了还不行,因为电脑还存在某些病毒文件,...

    如果你的电脑上出现有wup.exe文件占用CPU资源,那么你的电脑可能是中挖矿病毒了。

    腾讯的分析

    他会自动将他的目录添加到windows defender的扫描排除项
    在这里插入图片描述
    把他的这个排除项删了还不行,因为电脑还存在某些病毒文件,所以删除后还会自动恢复。

    我也想了很多的方法,还是不行,但是最终能够确定两个关键文件,csrss.exe和wup.exe这两个一定是有用的关键文件。
    直接把这两个文件删除也是不行,直接采用文件粉碎也还是不行!
    最后我是使用想着windows下有没有禁止exe打开的命令,百度一下还真有,

    windows下禁止exe打开的命令
    使用管理员打开CMD命令框,输入命令

    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\csrss.exe" /v debugger /t reg_sz /d debugfile.exe /f
    

    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\wup.exe" /v debugger /t reg_sz /d debugfile.exe /f
    

    禁止csrss.exe和wup.exe打开

    虽然这个方法没有根本上解决这个病毒,但是起码wup.exe不会占用cpu了。

    展开全文
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。广泛应用于容器存储、大数据分析、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流程、数据库备份。支持冷热数据分级存储,平均有效存储成本可低至 0.19元/月GB","link1":"https://www.aliyun.com/product/nas","link":"https://www.aliyun.com/product/nas","icon":"https://img.alicdn.com/tfs/TB1SisTRFXXXXbEXpXXXXXXXXXX-128-128.png","btn2":"折扣套餐","tip":"高性价比NAS新品上线,容量型NAS限时99元起! 立即查看","btn1":"立即开通","link2":"https://www.aliyun.com/product/nas","title":"文件存储 NAS"}],"search":[{"txt":"NAS新手入门","link":"https://m.aliyun.com/markets/aliyun/nas_edu01"},{"txt":"产品价格","link":"https://www.aliyun.com/price/product?spm=5176.149973.776685.6.ID90rH#/nas/detail"},{"txt":"最佳实践","link":"https://help.aliyun.com/document_detail/54998.html"},{"txt":"常见问题","link":"https://help.aliyun.com/knowledge_list/42175.html?spm=5176.59209.972911.4.3f6d3f62SVIECT"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"ifIcon":"icon","link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"nas","title":"文件存储 NAS","contentLink":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.1.27543d3eTvR5Bi","des":"阿里云文件存储(Network Attached Storage)是面向阿里云ECS、HPC和Docker的共享文件存储服务,支持linux和window客户端多种标准文件访问协议,无限容量及性能扩展、单一命名空间,企业级安全防护。","btn1":"立即开通","link1":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.2.27543d3eTvR5Bi","btn2":"产品文档","link2":"https://help.aliyun.com/product/27516.html?spm=5176.cnnas.0.0.42216689Kvc7ZO","link3":"https://nasnext.console.aliyun.com/overview?spm=5176.cnnas.0.0.42216689Kvc7ZO","btn3":"管理控制台","infoGroup":[{"infoName":"产品入门","infoContent":{"firstContentName":"NAS使用流程","firstContentLink":"https://help.aliyun.com/document_detail/148430.html?spm=a2c4g.11174283.6.564.b9c74da2J1uIZi","lastContentName":"挂载NAS到系统","lastContentLink":"https://help.aliyun.com/document_detail/27526.html?spm=a2c4g.11186623.6.566.1872495fTbU32y"}},{"infoName":"最新动态","infoContent":{"firstContentName":"极速型性能提升340%","firstContentLink":"https://yq.aliyun.com/articles/761833?spm=5176.cnnas.0.0.25216689DjruaG","lastContentName":"NAS低频型发布","lastContentLink":"https://yq.aliyun.com/articles/762197?spm=5176.cnnas.0.0.25216689DjruaG"}}]}]}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。广泛应用于容器存储、大数据分析、Web 服务和内容管理、应用程序开发和测试、媒体和娱乐工作流程、数据库备份。支持冷热数据分级存储,平均有效存储成本可低至 0.19元/月GB","link1":"https://www.aliyun.com/product/nas","link":"https://www.aliyun.com/product/nas","icon":"https://img.alicdn.com/tfs/TB1SisTRFXXXXbEXpXXXXXXXXXX-128-128.png","btn2":"折扣套餐","tip":"高性价比NAS新品上线,容量型NAS限时99元起! 立即查看","btn1":"立即开通","link2":"https://www.aliyun.com/product/nas","title":"文件存储 NAS"}],"search":[{"txt":"NAS新手入门","link":"https://m.aliyun.com/markets/aliyun/nas_edu01"},{"txt":"产品价格","link":"https://www.aliyun.com/price/product?spm=5176.149973.776685.6.ID90rH#/nas/detail"},{"txt":"最佳实践","link":"https://help.aliyun.com/document_detail/54998.html"},{"txt":"常见问题","link":"https://help.aliyun.com/knowledge_list/42175.html?spm=5176.59209.972911.4.3f6d3f62SVIECT"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"ifIcon":"icon","link":"https://img.alicdn.com/tfs/TB1XY8hGYr1gK0jSZFDXXb9yVXa-1740-328.png","icon":"nas","title":"文件存储 NAS","contentLink":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.1.27543d3eTvR5Bi","des":"阿里云文件存储(Network Attached Storage)是面向阿里云ECS、HPC和Docker的共享文件存储服务,支持linux和window客户端多种标准文件访问协议,无限容量及性能扩展、单一命名空间,企业级安全防护。","btn1":"立即开通","link1":"https://www.aliyun.com/product/nas?spm=5176.10695662.776724.2.27543d3eTvR5Bi","btn2":"产品文档","link2":"https://help.aliyun.com/product/27516.html?spm=5176.cnnas.0.0.42216689Kvc7ZO","link3":"https://nasnext.console.aliyun.com/overview?spm=5176.cnnas.0.0.42216689Kvc7ZO","btn3":"管理控制台","infoGroup":[{"infoName":"产品入门","infoContent":{"firstContentName":"NAS使用流程","firstContentLink":"https://help.aliyun.com/document_detail/148430.html?spm=a2c4g.11174283.6.564.b9c74da2J1uIZi","lastContentName":"挂载NAS到系统","lastContentLink":"https://help.aliyun.com/document_detail/27526.html?spm=a2c4g.11186623.6.566.1872495fTbU32y"}},{"infoName":"最新动态","infoContent":{"firstContentName":"极速型性能提升340%","firstContentLink":"https://yq.aliyun.com/articles/761833?spm=5176.cnnas.0.0.25216689DjruaG","lastContentName":"NAS低频型发布","lastContentLink":"https://yq.aliyun.com/articles/762197?spm=5176.cnnas.0.0.25216689DjruaG"}}]}]}}

    展开全文
  • 关于PE头的分析,写得好的要数Matt Pietrek的文章了。我今天写的主题就是学习这篇文章的一点体会,希望对大家在分析PE文件有所帮助,同时...好了,下面让我们来看看具体分析过程:1、用UltraEdit打开一个EXE文件(DLL

            关于PE头的分析,写得好的要数Matt Pietrek的文章了。我今天写的主题就是学习这篇文章的一点体会,希望对大家在分析PE文件有所帮助,同时加深自己对PE头的理解。

            PE头的总体结构如下:

    PE头总体

    图1、PE头总体结构

    在各个字段前面的数字代表在此结构体内的相对位移。

    好了,下面让我们来看看具体分析过程:

    1、用UltraEdit打开一个EXE文件(DLL文件也一样,只不过是起始地址不一样而已)。

    2、找到如图一所示的字段“Signature”,对于PE文件,它的值是"PE",如图二.

    图二、 一个EXE文件前面的字节情况

    3、从"PE"这个字符所在位置往下数120个字节。在图二中"PE"所在位置是d0h + 8;然后往下数120个字节就是图三了。

    图三

    图三:IMAGE_IMPORT_DESCRIPTOR的RVA

    我们由上图得到 IMAGE_IMPORT_DESCRIPTOR 的RVA = 0x0003c000(Intel是Little Endian.即从后向前读)

    IMAGE_IMPORT_DESCRIPTOR 结构体描述如下:

    DWORD   Characteristics
    这个域在以前可能是一个标志。现在Microsoft已经更改了它的意义但是并没有同时更新WINNT.H文件。它实际是一个指针数组的偏移地址(RVA)。其中的每个指针都指向一个IMAGE_IMPORT_BY_NAME结构。
    DWORD   TimeDateStamp
    指示文件创建日期的日期/时间戳。
    DWORD  ForwarderChain
    这个域与函数转发(Forward)有关。转发就是把对一个DLL中的某个函数的调用转到另一个DLL的某个函数上。例如在Windows NT上,KERNEL32.DLL就将它的一些导出函数转发到了NTDLL.DLL中。一个应用程序看起来好像调用的是KERNEL32.DLL中的函数,但实际上它调用的是NTDLL.DLL中的函数。这个域包含了FirstThunk数组(马上就要讲到)的索引。被这个域索引的函数会被转发到另一个DLL上。不幸的是,函数是如何转发的这种格式并未公开。转发函数的例子很难找到。
    DWORD   Name
    这是一个以NULL结尾的ASCII字符串的RVA,这个字符串包含导入的DLL的名称。常见的例子是“KERNEL32.DLL”和“USER32.DLL”。
    PIMAGE_THUNK_DATA FirstThunk
    这个域是IMAGE_THUNK_DATA共用体的偏移地址(RVA)。几乎在所有情况下,这个共用体都是作为指向IMAGE_IMPORT_BY_NAME结构的指针。如果这个域不是这些指针之一,那推测它应该是那个被导入的DLL所导出的一个序数值。从文档上看并不清楚是否可以只通过序数而不通过名称就能导入函数。

    4、打开windbg。噢,还没有,那赶快一下个吧.点这里下载。具体使用自己学吧,我也只会一点。

    5、打开windgb.FILE->Open Executalbe(或Ctrl+E),选择我们刚才用UE分析的那个EXE文件。

    6、View->Memory(或Alt+5),输入刚才那个地址,但要加上应用程序被加载的地址。(一般WIN32下面的应用程序的Base Address 是0x400000。所以最后输入的地址是:0x0043c000.如图四。然后我们根据上面关于IMAGE_IMPORT_DESCRIPTOR  的结构体说明可知,Characteristics = 0x3c028,FirstThunk = 0x3c2a0。

    图四:得到IMAGE_IMPORT_DESCRIPTOR结构体内的每一个成员的RVA

     

    7、一步一步靠近。。。。。

    8、因为第一项(前4个字节)是结构体内有关导入函数名的RVA = 0x0003c028

    9、我们再一次在那个"Virtual"后的那Edit栏内输入0x0043c028(不知怎么来的,晕)

    10、那我们就会看到如下的情况,图五。

    图五:函数导入的RVA = 0x0003c4a2

    11、最后一在Virtual后的那个Edit栏内输入0x043c4a2.会看到最后的美景。

    注:

    RVA:Relative virtual Address(相对地址)Virtual不译了。

    有点估计大家有所不明白,就是第3步中,为什么就偏移120个字节,而不是其他的。关于这个数字是这样算出来的。首先,4 + 20 + 96,这些是 IMAGE_DATA_DIRECTORY 这个类型数组前的偏移字节数,而再加8字节,是因为DataDirectory数组第一项是Export Symbols的RVA,第二项才是 Import Symbols,而数组的每一项是8字节,由此而来。

    edit by ytfrdfiw 03-25-08 :

    上面的那段关于Export symbols的解释可能不是太清楚,应该这样说: 这个数组名为 DataDirectory 的数组目前是16个类型为IMAGE_DATA_DIRECTORY 的元素,但第索引为1的元素(即DataDirectory[1]的元素)是我们要函数Import symbols,这些元素的函数为什么是这样,估计要问MS了。。所有各项为:

        IMAGE_DIRECTORY_ENTRY_EXPORT (0)输出符号目录用于DLL    
        IMAGE_DIRECTORY_ENTRY_IMPORT (1)输入符号目录    
        IMAGE_DIRECTORY_ENTRY_RESOURCE (2)资源目录    
        IMAGE_DIRECTORY_ENTRY_EXCEPTION (3)异常目录    
        IMAGE_DIRECTORY_ENTRY_SECURITY (4)安全目录    
        IMAGE_DIRECTORY_ENTRY_BASERELOC (5)重定位表    
        IMAGE_DIRECTORY_ENTRY_DEBUG (6)调试目录
        IMAGE_DIRECTORY_ENTRY_COPYRIGHT (7)描述版权串    
        IMAGE_DIRECTORY_ENTRY_GLOBALPTR (8)机器值    
        IMAGE_DIRECTORY_ENTRY_TLS (9)Thread local storage目录
        IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG (10)Load configuration 目录    
        IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11)Bound import directory目录    
        IMAGE_DIRECTORY_ENTRY_IAT (12)Import Address Table输入地址表目录

    参考文章:

    PE文件格式,qduwg翻译 看雪学院整理

    Matt Pietrek,March 1994,Peering inside the PE: A tour of the Win32 Portable Executable File Format

    然希望对你有所帮助,也希望你能提出意见,谢谢!

     

    展开全文
  • wine真的是一个非常厉害的模拟器(大雾),它甚至连Windows版本的OBS都能运行,然而每次运行都得用命令行太不方便了,而Deepin不知道为什么,exe右键打开方式里居然没有wine,诶,要是能像windows一样在桌面上创建个...
  • 我们进行信息安全编程的时候,经常需要向exe文件插入自己的源代码,我们如何在代码中实现呢。请见代码与注释讲解#include #include #include ////////////////////////////////////////////////////////////////...
  • 本篇博文再一次分析DCMTK自带的工具包dcmqrscp.exe(类似于一个单机版miniPACS),此次主要关注dcmqrscp.exe的数据库部分,通过使用dcmqridx.exe手动操作dcmqrscp.exe的数据库文件,直观了解数据库的记录内容;...
  • 1 在每个目录下生成的Desktop_.ini,并设置隐藏属性,里面记录了病毒文件的感染日期 2 exe文件的感染过程 转载于:https://www.cnblogs.com/wingss/p/5423142.html
  • [DESCRIPTION] 当发生异常后,除了有mtklog外,还有aee_exp目录下的db,很多异常分析都是基于db的。db是一个压缩的2进制文件,无法直接打开。 ...比如txt文件,双击后notepad.exe会打开txt文件。.
  • 运行VFP的exe文件时显示: 程序错误 “无效的路径或文件名” 点击忽略后程序仍然可以正常运行,但是这个问题如何解决呢? 原因分析: main.prg中路径设置出错 如果挂起,会发现问题出在:set default to*** ...
  • txplatform是什么?txplatform.exe进程做什么用的?进程里2个txplatform.exe是病毒吗?txplatform病毒如何查杀... txplatform.exe文件进程分析  TXPlatform - TXPlatform.exe - QQ相关进程信息  进程文件: ...
  • 需求分析:有些机友在刷recovery的时候不知道如何刷入,于是产生写bat脚本和打包为exe可执行文件,只要机友正确安装好驱动后连接手机双击就可以刷入rec了 解决过程: 需要打包的文件 操作过程截图说明: ...
  • 刚才正在做项目,老大喊过去问我,如何对一个完整的路径进行分析?比如说,C:/Program Files/QQ/QQ.exe,我想取出文件名怎么办?我想得到扩展名怎么办?我已开始想到的就是字符分析,比如从后往前分析,遇到.就是后缀...
  • 在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们...
  • 本文讲的是利用WinDbg和wscript.exe分析JavaScript脚本...我们之前关于.NET分析的文章引起了很多关于如何使用WinDBG来分析.js文件的兴趣。在这篇文章中我们使用WinDBG及64位版本的wscript.exe分析JavaScript。强烈...
  • Py程序打包成exe文件很多同学都会,但是很多人打包完发现:一个简单的Py程序打包成exe文件之后编程几百兆了 Python如何打包成exe,以及如何打得足够小。 一、标准打包 目前比较常见的打包exe方法都是通过Pyinstaller...
  • [C#] 如何分析stackoverflow等clr错误

    千次阅读 2016-03-10 17:23:10
    有时候由于无限递归调用等代码错误,w3wp.exe会报错退出,原因是clr.exe出错了。这种错误比较难分析,因为C#代码抓不住异常。处理方法是:生成dump文件,然后用WinDbg去看看什么地方出错了。WinDbg能够分析clr的...
  • 如何查看一个运行的exe执行程序需要有哪些DLL动态链接库...第五步:鼠标点击“显示进程加载的模块”第六步:显示正在运行的exe所包含的动态链接库DLL以及引用的库文件所在的位置 【笔者注】笔者在VS2008分析一段代码,
  • 常见的exe、dll、sys、scr都是PE文件分析PE文件格式,直接修改  此种方式需要对PE文件的格式比较了解,才能进行修改,否则很可能将文件损坏。  本文主要描述第二种方式: 通过Windows API进行修改 ...
  • 一般情况,exe文件都是一些独立执行的程序,不需要涉及其他输入输出。但是有时我们的确需要! 下面我们就对这个问题分析下! 其实,将参数传递给一个由matlab创建的exe,与将参数传递给其它任何平台的应用程序一样...
  • 进程文件:SearchNet或者SearchNet.exe进程名称:Zhongsou地址栏搜索描述:SearchNet.exe是中搜寻址相关工具程序,随一些软件捆绑,建议立即删除。 出品者:zhongsou.com属于:中搜寻址 系统进程:否后台程序:...
  • 其实它是一个.exe文件,直接帮它加上后缀.exe 将README.md文件复制到gh-md-toc.exe同级目录下 按住shift键同时右击,选择在此处打开powershell 在打开的命令窗口中输入 ./gh-md-toc.exe README.md 将以下内容...
  • 如何让进程退出前删除自身EXE

    千次阅读 2009-05-18 11:31:00
    下面的代码由 Gary Nebbett 写就。Gary Nebbett 乃是 WINDOWS NT/2000 NATIVE API REFERENCE 的作者,NT 系统... 这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了。int main(int argc, char *argv[]) { H
  •  3、对于像被"熊猫烧香"感染的EXE文件,上述两种手工处理无效,因为无法手工清除受病毒感染的文件中的病毒,这时只能向杀毒软件厂商提供病毒样本,等待杀毒软件升级后再进行处理,或重新安装操作系统。  二、 ...
  • 需要去调试一个exe,查看内部执行的过程,但是该exe的源代码是孤立的,利用make文件组织进行编译.每天会给出编译包。问题的分析:考虑1. 新建一个VS的工程,然后手动添加这些文件,然后编译调试。考虑2. 既然有make...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 312
精华内容 124
关键字:

如何分析exe文件