测试文件:https://adworld.xctf.org.cn/media/task/attachments/088c3bd10de44fa988a3601dc5585da8.exe

1.准备

获取信息

  1. 32位文件
  2. 北斗压缩壳(nsPack)

1.脱壳

1.1 OD打开(esp定律法)

Word或者DWord都可以

点击确认就行。

这样我们的断点就下好了,直接F9运行到断点即可。

选择OllyDump插件进行脱壳。

将文件重命名就可以了。

1.2 软件脱壳法

这个没什么讲究,拖进去脱壳就行

不过这个方法有个缺点是文件有损坏

可以使用ImportREC进行修复

2.IDA打开

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

3.代码分析

通过第42行代码,可以了解到flag长度为42

通过第15行代码,我们知道输入的正确flag与byte_402130[v4 % 16]进行异或等于dword_402150[v4],这个v4就是一个数组下标,最大为41

.nsp0: byte_402130     db 't'                  ; DATA XREF: _main:loc_40107F↑r
.nsp0: aHisIsNotFlag db 'his_is_not_flag',

实际上就是"this_is_not_flag"

.nsp0: dword_402150    dd 12h                  ; DATA XREF: _main+8D↑r
.nsp0: dd , , 14h, 24h, 5Ch, 4Ah, 3Dh, 56h, 0Ah, 10h, 67h,
.nsp0: dd 41h,
.nsp0:0040218C dd , 46h, 5Ah, 44h, 42h, 6Eh, 0Ch, 44h, 72h, 0Ch, 0Dh
.nsp0:0040218C dd 40h, 3Eh, 4Bh, 5Fh, , , 4Ch, 5Eh, 5Bh, 17h, 6Eh, 0Ch
.nsp0:0040218C dd 16h, 68h, 5Bh, 12h, dup()
.nsp0: dd 48h, 0Eh dup()
.nsp0:0040223C dd offset dword_403000
.nsp0: dd offset dword_4022B0
.nsp0: dd , 53445352h, 41D713B4h, 4CDD5318h, 12DCFFBAh, 0D5AF8709h
.nsp0: dd

这段数字实际上就需要42个。

3.脚本获取

byte_402130 = "this_is_not_flag"
dword_402150 = [ 0x12, 4, 8, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 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, 0x0C, 0x16, 0x68,
0x5B, 0x12, 0, 0, 0x48 ] x = '' for i in range(0,42):
x += chr(dword_402150[i]^ord(byte_402130[i%16])) print(x)

4.get flag!

flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}

攻防世界--crackme的更多相关文章

  1. xctf攻防世界——crackme writeup

    感谢xctf提供学习平台 https://adworld.xctf.org.cn crackme有壳,脱壳部分见文章: https://www.cnblogs.com/hongren/p/126332 ...

  2. 逆向-攻防世界-crackme

    查壳,nSpack壳,直接用软件脱壳,IDA载入程序. 很明显,就是将402130的数据和输入的数据进行异或,判断是否等于402150处的数据.dwrd占4字节. 这道题主要记录一下刚学到的,直接在I ...

  3. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  4. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  5. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  6. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  7. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  8. 攻防世界 | CAT

    来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...

  9. 攻防世界 robots题

    来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...

随机推荐

  1. neuoj1472 yuki的氪金之旅(倒置树状数组

    这题一直re不造为啥..后来yww大神把树状数组“倒过来”就过了,倒过来的好处是算sum(d[i]+1)就行,不涉及除法,不用求逆元. 题意:初始手牌颜值是0,一共抽卡n次,第i次抽卡有pi的概率能抽 ...

  2. Jquery异步上传文件

    我想通过jQuery异步上传文件,这是我的HTML: 1 2 3 <span>File</span> <input type="file" id=&q ...

  3. JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

    1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...

  4. export default{} 和 new Vue()都是什么意思

    在生成.导出.导入.使用 Vue 组件的时候,有些新手就会常常被位于不同文件的 new Vue() 和 export default{} 搞得晕头转向.它们含义到底是什么,又有什么异同呢? 首先,Vu ...

  5. MySQL数据库5事务、视图、触发器、函数、数据库的备份

    目录 一.事务(important) 1.1什么是事务? 1.2解决办法 1.2.1事务的语法 1.2.2使用事务解决转账问题代码演示 1.2.3rollback 1.3事务的特性(important ...

  6. Map.Entry的由来和使用

    首先,回忆和练习一下HashMap的遍历 package Exercise.exercise; import java.util.HashMap; import java.util.Iterator; ...

  7. 17 安全字符串 System.Security.SecureString

  8. CUDA Error

    第一个问题:CUDA Error: out of memory darknet: ./src/cuda.c:36: check_error: Assertion `0' failed. 已放弃 (核心 ...

  9. 【HDOJ6630】permutation 2(递推)

    题意:给定x,y,n,有标号从1到n的n个数组,求合法的排列个数模998244353使得 1:p[1]=x 2:p[n]=y 3:相邻两项的差的绝对值<=2 n<=1e5 思路: #inc ...

  10. PHPExcel笔记

    PHPExcel可是个好东东,功能强大,下面这是一个phpExcel简易中文帮助手册,列举了各种属性,以及常用的操作方法,是每一个都用实例加以说明,希望对大家有所帮助. 引用PHPExcel incl ...