[Reverse]首届“天权信安&catf1ag”网络安全联合公开赛checkin

Checkin(点击下载文件)

查壳脱壳

file

发现是upx壳我们直接使用工具脱壳
file

发现无法直接脱壳看样子是魔改的upx我们只能手动脱壳
将程序放入x32dbg
file

点击上面的调试后点击运行
file

进入这个界面看到pushad就可以确定是有壳了,我们按f8单步运行至mov指令。
file

右击左侧ESP
file

选择在转储中跟随
file

右击左下角选择如上操作后按f9让程序跑起来
然后一直按f8直到程序第一次跳转后再按f8 就是找到了程序入口
file

点击如下按钮
file

file

选择dump
file

取名字保存之后依次选择
file

file

选择刚刚重命名的文件,就可以看到桌面上出现了,就是脱壳成功了
file

IDA分析

shift+f12找到该字符串交叉应用到关键函数

file

发现该段函数没有被声明
file

讲红色部分全部框住然后按p声明之后进入函数
file

当sub_F312c6返回值为1时输出text的内容内容为“you are good”
我们只需要进入sub_F312c6中查看
file

出现花指令 nnd,进去看看
选中红色这行然后按tab
file

红色部分全部nop掉然后将call函数转化为data
file

再把数据E8用nop填充然后逐行按c转化为代码
(这里直接nop会从E8变成90,我们需要先把90单独按c转化为nop指令)
接下来发现下面还有红色的部分也是按照上面的操作类似操作
所有类似于
file

这样的数据都按c转化为汇编代码
file

操作到这里然后把上面的代码都括住按p声明
然后按f5反编译为伪代码
file

根据伪代码内容写wp

EXP

#include<iostream>
using namespace std;
int a[257] = {0}; //v16+1228
int b[257] = {0}; //v16 +20
char v16[10] = "flechao10";
char v13[4] = "#<#";
int v12[257]={0};
int main()
{
 v12[0] = -125;
  v12[1] = 27;
  v12[2] = -14;
  v12[3] = 75;
  v12[4] = -81;
  v12[5] = 1;
  v12[6] = 5;
  v12[7] = 35;
  v12[8] = 57;
  v12[9] = 93;
  v12[10] = -94;
  v12[11] = -101;
  v12[12] = -110;
  v12[13] = -15;
  v12[14] = -99;
  v12[15] = -35;
  v12[16] = -35;
  v12[17] = -103;
  v12[18] = -68;
  v12[19] = 119;
  v12[20] = -53;
  v12[21] = 25;
  v12[22] = 114;
  v12[23] = -27;
  v12[24] = 100;
  v12[25] = 47;
  v12[26] = -42;
  v12[27] = 62;
  v12[28] = 15;
  v12[29] = 18;
  v12[30] = 5;
  v12[31] = 108;
  v12[32] = -112;
  v12[33] = 48;
  v12[34] = -73;
  v12[35] = 2;
  v12[36] = -58;
  v12[37] = -48;
  v12[38] = 0xE8;
  v12[39] =  0x23;
  v12[40] = 0x3C;
  v12[41] =  0x23;
    int v15[257] = {0};
    for(int i = 0 ; i < 50 ; i ++ )
    {
        v15[i+1]=v12[i];
    }
    for(int i = 0 ;  i < 256 ; i++ )
    {
        a[i]=v16[i%9];
        b[i]=i;
    }
    int v10 = 0,v8;
    for(int i = 0 ; i < 256 ; i++ )
    {
        v10 = (a[i]+b[i]+v10)%256;
        v8 = b[i];
        b[i]=b[v10];
        b[v10]=v8^0x37;
    }
    int v5 = 0 ,v11 = 0 ;
    int v9 = 0;
    for(int i = 0 ; i < 50 ;  i++ )
    {
        v5 = (v5+1)%256;
        v11 = (b[v5]+v11)%256;
        v9 = b[v5];
        b[v5]=b[v11];
        b[v11]=v9;
        v15[v5]^=b[(b[v11]+b[v5])%256];
    }
    for(int i = 0 ; i < 42; i ++ )
    {
        printf("%c",v15[i+1]);
    }
}
//
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇