找回密码
 立即注册

QQ登录

只需一步,快速开始

1401软件论坛总版规【新人必看】如何正确发布收费帖子加入vip系统学习仅需498元免费获得1401软件安全论坛vip开通本站VIP会员请联系QQ 564853771
论坛纪念优盘Beyond EXE超强加密器V1.61401论坛破解工具包 2017-9-12[破解班vip]入门篇[破解班vip]基础篇
[破解班vip]脱壳篇[破解班vip]实战篇[破解班vip]网络验证篇[破解班vip]零基础HOOK教程[破解班vip]零基础易语言入门
[破解班vip]零基础c语言入门[破解班vip]零基础Delphi编程入门[破解班vip]寒假培训课程共7课[破解班vip]破解提高篇[破解班vip]易语言培训课程
[破解班vip]核心技术培训篇[破解班vip]pe格式与pe操作[破解班vip]2022全新封包-山寨-爆破全系列[原创课程]c++单文档框架课程[逆向班vip]汇编语句与反汇编基础
[逆向班vip]全自动扫雷辅助[逆向班vip]手机模拟按键[逆向班vip]植物大战僵尸辅助广告位招租...付费破解软件 +Q 564853771
查看: 5319|回复: 0

解析coff文件之提取shellcode代码

[复制链接]
  • TA的每日心情
    无聊
    2024-8-21 12:19
  • 签到天数: 342 天

    [LV.8]以坛为家I

    343

    主题

    456

    回帖

    2104

    积分

    武林新贵

    UID
    7
    元宝
    250
    威望
    817
    贡献
    64
    信誉值
    0
    精华
    10
    在线时间
    189 小时
    注册时间
    2014-1-16
    最后登录
    2024-8-21
    违规
    0
    积分
    2104

    优秀版主热心会员金点子奖突出贡献最佳新人活跃会员宣传达人吾爱富翁论坛元老管理团队已有小成灌水之王

    发表于 2015-3-11 14:25:37 | 显示全部楼层 |阅读模式
    Ȧ
    呵.....就叫SClinker吧-.-Shell code linker...
    主要是提取代码段(.text)的数据,这个还算不上是真正的linker.
    其他说明:
    第一请不要再shellcode中全局变量.
    第二请不要调用API(你懂的-.-)
    shellcode无聊代码:
    1.      .386
    2.         .model flat,stdcall
    3.         option casemap:none
    4. include windows.inc
    5.     .code
    6. start:
    7. ;瞎编乱写仅仅用于举例
    8. mov eax,410f2h ;补丁地址
    9. mov byte ptr[eax],90h ;nop指令
    10. mov ebx,[eax+4]
    11. .if ebx==0E8h
    12. mov byte ptr[ebx],90h
    13. .endif
    14. end start
    复制代码



    命令行:
    SCLinker obj文件 目标文件
    例如:SCLinker myshellcode.obj shellcode.bin
    把这个加在MakeFile里面就很方便了 呵呵


    1. <p> #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #pragma pack(push)
    5. #pragma pack(1)
    6. typedef struct{
    7.     unsigned short usMagic;
    8.     unsigned short usNumSec;
    9.     unsigned long ulTime;
    10.     unsigned long ulSymolOffset;
    11.     unsigned long ulNumSymbol;
    12.     unsigned short usOptHdrSZ;
    13.     unsigned short usFlags;
    14. }COFF_FILE_HEADER;
    15. typedef struct {
    16.     unsigned short usMagic;
    17.     unsigned short usVersion;
    18.     unsigned long ulTextSize;
    19.     unsigned long ulInitDataSZ;
    20.     unsigned long ulUnintiDataSZ;
    21.     unsigned long uEntry;
    22.     unsigned long ulTextBase;
    23.     unsigned long ulDataBase;
    24. }OPTHDR;
    25. typedef struct {
    26.     char cName[8];
    27.     unsigned long ulVSize;
    28.     unsigned long ulVAddr;
    29.     unsigned long ulSize;
    30.     unsigned long ulSecOffset;
    31.     unsigned long ulRelOffset;
    32.     unsigned long ulLNOffset;
    33.     unsigned short ulNumRel;
    34.     unsigned short ulNumLN;
    35.     unsigned long ulFlags;
    36. }SECHDR;</p><p>typedef struct {
    37.     unsigned long ulAddr;/* virtual address of reference */
    38.     unsigned long uSymbol;
    39.     unsigned short usType;
    40. } RELOC;</p><p>typedef struct {
    41.     unsigned long ulAddrORSymbol;
    42.     unsigned short usLineNq;</p><p>} LINENO;</p><p>typedef struct {
    43.     union {
    44.         char cName[8];
    45.         struct {
    46.             unsigned long ulZero;
    47.             unsigned long ulOffset;
    48.         }e;
    49.     }e;
    50.     unsigned long ulValue;
    51.     short iSection;
    52.     unsigned short usType;
    53.     unsigned char usClass;
    54.     unsigned char usNumAux;
    55. }SYMENT;
    56. #pragma pack(pop)</p><p>int main(int argv,char **argc)
    57. {
    58.     FILE *fp;
    59.     COFF_FILE_HEADER head;
    60.     OPTHDR option;
    61.     SECHDR sec;
    62.     if (argv<3)
    63.     {
    64.         printf("参数错误[SCLinker obj文件 目标文件]\n");
    65.         return -1;
    66.     }
    67.     fp=fopen(argc[1],"rb+");
    68.     if(!fp)
    69.     {
    70.         printf("文件不能打开\n");
    71.         return -1;
    72.     }
    73.     // 读入文件头
    74.     fread(&head,sizeof(head),1,fp);\
    75.     if(head.usMagic!=0x014c)
    76.     {
    77.         printf("不是有效的coff文件\n");
    78.         goto exit_;
    79.     }
    80.     if (head.usOptHdrSZ!=0)
    81.     {
    82.         //文件指针正好指向 Optional Header
    83.         //不用fseek 因为有可能会用到这个结构
    84.         fread(&option,sizeof(OPTHDR),1,fp);
    85.     }
    86.     for (unsigned i=0;i<head.usnumsec;i++)
    87.     {
    88.         fread(&sec,sizeof(SECHDR),1,fp);
    89.         if(!strcmp(sec.cName,".text"))
    90.         {
    91.             char *buff;
    92.             FILE *s;
    93.             fseek(fp,sec.ulSecOffset,SEEK_SET);
    94.             buff = new char[sec.ulSize];
    95.             fread(buff,sec.ulSize,1,fp);
    96.             s=fopen(argc[2],"wb+");
    97.             fwrite(buff,sec.ulSize,1,s);
    98.             fclose(s);
    99.             break;
    100.         }
    101.     }
    102. exit_:
    103.     fclose(fp);
    104.     return 0;
    105. }</p>
    复制代码


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|1401软件安全 ( ICP备16034480号 )

    GMT+8, 2024-12-5 03:12 , Processed in 0.137448 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表