攻防世界 Re wp

hello ctf

image

sprintf():int sprintf( char *buffer, const char *format, [ argument] … ) eg:int sprintf(buff,'%c',s) s为数组名,'%c’为c语言格式符(char)

功能:把格式化的数据写入某个字符串缓冲区

bufferchar型指针,指向将要写入的字符串的缓冲区。

format:格式化字符串。

[argument]..******.:可选参数,可以是任何类型的数据。

返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。

strcat():连接两个字符串

memset:memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。

分析可知,在strcmp之前的内容是把输入的字符串传给v10存储

函数名: isatty

用 法: int isatty(int desc);

返回值:如果参数desc所代表的文件描述词为一终端机则返回1,否则返回0。

绞尽脑汁都不知道那个字符串是怎么来的最后看WP才知道原来还有16进制字符串这东西QAQ

flag

image

opensource

image
image

atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数

呃这道题比较简单

csaw2013reversing2

打开程序发现是一堆乱码

image

用OD打开 查找所有字符串发现第一个字符串有点可疑。 点进去下断点F9跟进

image

进去发现messageboxa跳过了一个函数00891000,然后就是直接弹出乱码,因此我想进入函数00891000探个究竟。把je short 008910B9 改为je short 0089109B

image

直接进去后发现后来运行时窗口弹出变成了一片空白,所以应该是漏了点什么,再仔细分析,发现上面有一个jnz跳转,应该与其有关,我让该跳转实现试试。

image

直接把int3中断换成nop,不然会终止程序

image

果然,最后直接在寄存器中找到flag

image

flag{reversing_is_not_that_hard!}

再跑了一遍发现其实不用管上面的跳转都有flag了,只是第一遍时跑太快了没看到flag。

get it

用IDApro打开

image
image

发现有字符串,点进去看

image

发现有个char s[ ] 数组 和一个char t (也算是数组,以t为首地址)。

发现字符串与????的位数相同,猜测应该是对该字符串进行了变换,点进main函数,发现有个while循环,应该就是转换算法

image

python写脚本得字符串为

所以

image

flag为:SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

re for 50 plz 50

用IDA打开后 不能直接F5

image

分析框图,有个字符串,应该是对此字符串进行处理

加载进来时发现是MIP写的

image

mips下的汇编指令集 参考https://blog.csdn.net/sdreamq/article/details/50776404

分析发现,就是对该字符串进行了37xor

写python脚本

image

TUCTF{but_really_whoisjohngalt}

crakeme

image

用peid查壳 发现有个NSPACK3.4-7的壳 ,网上直接找脱壳机脱壳

image
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int result; // eax
  int v4; // eax
  char Buf; // [esp+4h] [ebp-38h]
  char Dst; // [esp+5h] [ebp-37h]

  Buf = 0;
  memset(&Dst, 0, 0x31u);
  printf("Please Input Flag:");
  gets_s(&Buf, 0x2Cu);
  if ( strlen(&Buf) == 42 )
  {
    v4 = 0;
    while ( (*(&Buf + v4) ^ byte_402130[v4 % 16]) == dword_402150[v4] )
    {
      if ( ++v4 >= 42 )
      {
        printf("right!\n");
        goto LABEL_8;
      }
    }
    printf("error!\n");
LABEL_8:
    result = 0;
  }
  else
  {
    printf("error!\n");
    result = -1;
  }
  return result;
}

分析后写python脚本

string_2 = [0x12, 4, 8, 0x14, 0x24, 0x5c, 0x4a, 0x3d, 0x56, 0xa, 0x10, 0x67, 0,
            0x41, 0, 1, 0x46, 0x5a, 0x44, 0x42, 0x6e, 0x0c,
            0x44, 0x72, 0x0c, 0x0d, 0x40, 0x3e, 0x4b, 0x5f, 2, 1, 0x4c, 0x5e, 
            0x5b, 0x17, 0x6e, 0xc, 0x16, 0x68, 0x5b, 0x12, 0x48, 0x0e]
flag = ""
for i in range(42):
    flag += chr(string_2[i] ^ ord(string_1[i % 16]))
print(flag)
图片.png

得到flag

key

用ida打开程序,可以看到main函数,调用了一个子函数
在这里插入图片描述
点进去子函数,然后按F5,可以看到有100多行的代码。看到这里无从下手。我们先定位关键的字符串。把代码往下拉可以看到有"Congrats you got it!"的字符串。
在这里插入图片描述从这里往会看,可以看到要进入这里有一个分支语句
在这里插入图片描述
sub_4020C0是一个关键函数,我们来看看函数的每个参数分别是什么。
点击v44,亮黄的地方可以看到
在这里插入图片描述
我们进入这个函数,会发现根本无法下手,我们可以先放弃
v12,v45,v48可以发现没有什么实际的意义
然后来看一下v13,memory将值赋给了v13,所以v13就相当于memory,所以来看一下memory,有两个地方用到了memory
在这里插入图片描述现在看一下memory里面存着什么
在这里插入图片描述
在这里插入图片描述
v50里面存的内容
在这里插入图片描述
进去看一下sub_4021E0这个函数是做什么的。
在这里插入图片描述
如果继续看每个子函数会发现很难分析得清楚,所以我们现在换种思路用动态调试的方法观察这个会发生什么,直接用Ida动态调试。在sub_4021E0前面设置断点。可以发现只是将值赋给v41,这只是一个赋值函数。
现在我们还有一个问题没有解决v44是什么?
我们可以打开Strings window看到
这个路径我们好像从来都没有用到,点击交叉引用看一下。
他是在sub_402550中被用到,在结合sub_401620的代码可以看到它里面调用了sub_402550,所以v44就是一个从文件夹读出的内容。
最后看一下sub_4020C0

  v5 = a3;
  if ( this[4] < a3 )
    v5 = this[4];
  if ( this[5] >= 0x10u )
    this = (_DWORD *)*this;
  v6 = a5;
  if ( v5 < a5 )
    v6 = v5;
  if ( v6 )
  {
    v7 = a4;
    v9 = v6 < 4;
    v8 = v6 - 4;
    if ( v9 )
    {
LABEL_11:
      if ( v8 == -4 )
        goto LABEL_20;
    }
    else
    {
      while ( *this == *(_DWORD *)v7 )
      {
        ++this;
        v7 += 4;
        v9 = v8 < 4;
        v8 -= 4;
        if ( v9 )
          goto LABEL_11;
      }
    }
    v9 = *(_BYTE *)this < *(_BYTE *)v7;
    if ( *(_BYTE *)this != *(_BYTE *)v7
      || v8 != -3
      && ((v10 = *((_BYTE *)this + 1), v9 = v10 < *(_BYTE *)(v7 + 1), v10 != *(_BYTE *)(v7 + 1))
       || v8 != -2
       && ((v11 = *((_BYTE *)this + 2), v9 = v11 < *(_BYTE *)(v7 + 2), v11 != *(_BYTE *)(v7 + 2))
        || v8 != -1 && (v12 = *((_BYTE *)this + 3), v9 = v12 < *(_BYTE *)(v7 + 3), v12 != *(_BYTE *)(v7 + 3)))) )
    {
      result = -v9 | 1;
      goto LABEL_21;
    }
LABEL_20:
    result = 0;
LABEL_21:
    if ( result )
      return result;
  }
  if ( v5 >= a5 )
    result = v5 != a5;
  else
    result = -1;
  return result;

可以分析出是判断相不相等的问题。
综上就可以写出脚本得到flag

str1 = "themidathemidathemida"
str2 = ">----++++....<<<<."
 
key =""
flag=""
for i in range(18):
    key += chr((ord(str1[i]) ^ ord(str2[i]))+22)
for i in key:
    flag+=chr(ord(i)+9)
 
 
print(flag)

参考:https://blog.csdn.net/qq_41667282/article/details/90578431

no_strings_attached

得到一个文件,用winhex查看一下其特征,发现是一个ELF文件

图片.png

用IDA打开先看看情况
图片.png

shift+F12 查看字符串框,发现没有对我们有用的字符串
图片.png

分析一下函数,发现authenticate里面的decrypt函数应该是关键函数
找到其地址
图片.png

使用gdb下断点调试,(我用的带有peda的,方便查看,要安装可以点击peda
在8048707处下断点,因其是decrypt结束位置
图片.png

图片.png

地址前面一定要加0x 不然会显示是未知数据
然后r运行,inf reg x/286 $eax 查看eax寄存器值(用以进行算数运算和返回函数结果等)
图片.png

eax中的16进制数转成字符就是flag

CSAW2013Reversing2

sub_40100 为解密函数,必须经过,所以修改 jz short loc_4010B9 为 jmp short loc_401096.

loc_4010B9输出flag的函数,解密完应跳转到loc_4010B9

具体修改步骤:
修改 int 3 为 NOP.
修改 jmp short loc_4010EF 为 jmp short loc_4010B9.
修改 jz short loc_4010B9 为 jmp short loc_401096.
修改后需要点击apply patches to input file


图片.png

图片.png

simple-check-100

用IDA打开后进行调试,发现有个主要的if语句,
将其修改后运行,发现生成的是乱码。
改用gdb调试,用set $eax=1将寄存器的值修改为1

运行后得到flag
图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335