9.re1-100

 1 if ( numRead )
2 {
3 if ( childCheckDebugResult() )
4 {
5 responseFalse();
6 }
7 else if ( bufParentRead[0] == '{' ) // 第一位
8 {
9 if ( strlen(bufParentRead) == 42 ) // 输入的长度为42d
10 {
11 if ( !strncmp(&bufParentRead[1], "53fc275d81", 0xAuLL) )// 输入的1-10位(输入的第2位到第11位)
12 {
13 if ( bufParentRead[strlen(bufParentRead) - 1] == '}' )// 最后一位
14 {
15 if ( !strncmp(&bufParentRead[31], "4938ae4efd", 0xAuLL) )// 输入的31-40位
16 {
17 if ( !confuseKey(bufParentRead, 42) )//关键
18 {
19 responseFalse();
20 }
21 else if ( !strncmp(bufParentRead, "{daf29f59034938ae4efd53fc275d81053ed5be8c}", 0x2AuLL) )// 修改后的结果进行比较
22 {
23 responseTrue(); // {53fc275d81053ed5be8cdaf29f59034938ae4efd}
24 }
25 else
26 {
27 responseFalse();

主要分析confuseKey(bufParentRead, 42)函数

 1 bool __cdecl confuseKey(char *szKey, int iKeyLength)
2 {
3 char szPart1[15]; // [rsp+10h] [rbp-50h]
4 char szPart2[15]; // [rsp+20h] [rbp-40h]
5 char szPart3[15]; // [rsp+30h] [rbp-30h]
6 char szPart4[15]; // [rsp+40h] [rbp-20h]
7 unsigned __int64 v7; // [rsp+58h] [rbp-8h]
8
9 v7 = __readfsqword(0x28u);
10 *(_QWORD *)szPart1 = 0LL;
11 *(_DWORD *)&szPart1[8] = 0;
12 *(_WORD *)&szPart1[12] = 0;
13 szPart1[14] = 0;
14 *(_QWORD *)szPart2 = 0LL;
15 *(_DWORD *)&szPart2[8] = 0;
16 *(_WORD *)&szPart2[12] = 0;
17 szPart2[14] = 0;
18 *(_QWORD *)szPart3 = 0LL;
19 *(_DWORD *)&szPart3[8] = 0;
20 *(_WORD *)&szPart3[12] = 0;
21 szPart3[14] = 0;
22 *(_QWORD *)szPart4 = 0LL;
23 *(_DWORD *)&szPart4[8] = 0;
24 *(_WORD *)&szPart4[12] = 0;
25 szPart4[14] = 0;
26 if ( iKeyLength != 42 )
27 return 0;
28 if ( !szKey )
29 return 0;
30 if ( strlen(szKey) != 42 )
31 return 0;
32 if ( *szKey != 123 )
33 return 0;
34 strncpy(szPart1, szKey + 1, 0xAuLL); // 将输入去掉头尾{}后的部分分成4部分
35 strncpy(szPart2, szKey + 11, 0xAuLL);
36 strncpy(szPart3, szKey + 21, 0xAuLL);
37 strncpy(szPart4, szKey + 31, 0xAuLL);
38 memset(szKey, 0, iKeyLength);
39 *szKey = '{';
40 strcat(szKey, szPart3); // 分割后的部分重新组合
41 strcat(szKey, szPart4);
42 strcat(szKey, szPart1);
43 strcat(szKey, szPart2);
44 szKey[41] = '}';
45 return 1;
46 }

算法十分简单:

 1 s1='53fc275d81'
2 s4='4938ae4efd'
3 # 3,4,1,2
4 ss='daf29f59034938ae4efd53fc275d81053ed5be8c'
5 x=[]
6 for i in range(0,len(ss),10):
7 x.append(ss[i:i+10])
8 print(x)
9 print('{',''.join((x[2],x[3],x[0],x[1])),'}',sep='')
10
11 # ['daf29f5903', '4938ae4efd', '53fc275d81', '053ed5be8c']
12 # {53fc275d81053ed5be8cdaf29f59034938ae4efd}

{53fc275d81053ed5be8cdaf29f59034938ae4efd}

这题实在是简单,签到题水平,竟然放到了进阶区,,,,

因为提交时没有{}

是不是很坑,

hahah

攻防世界 reverse 进阶 9-re1-100的更多相关文章

  1. 攻防世界 reverse 进阶 APK-逆向2

    APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...

  2. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  3. 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017

    8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...

  4. 攻防世界 reverse 进阶 12 ReverseMe-120

    程序流程很清晰 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 unsigned int v3; // ...

  5. 攻防世界 reverse 进阶 notsequence

    notsequence  RCTF-2015 关键就是两个check函数 1 signed int __cdecl check1_80486CD(int a1[]) 2 { 3 signed int ...

  6. 攻防世界 reverse 进阶 easyre-153

    easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...

  7. 攻防世界 reverse 进阶 -gametime

    19.gametime csaw-ctf-2016-quals 这是一个小游戏,挺有意思的 's'-->' '    'x'-->'x'   'm'-->'m' 观察流程,发现检验函 ...

  8. 攻防世界 reverse 进阶 16-zorropub

    16.zorropub  nullcon-hackim-2016 (linux平台以后整理) https://github.com/ctfs/write-ups-2016/tree/master/nu ...

  9. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...

随机推荐

  1. React Fragment All In One

    React Fragment All In One React还提供了一个无需包装即可呈现多个元素的组件. https://reactjs.org/docs/react-api.html#fragme ...

  2. macOS & uninstall app

    macOS & uninstall app https://support.apple.com/en-hk/guide/mac-help/install-and-uninstall-other ...

  3. 3D 室内装修线设计软件

    3D 室内装修线设计软件 WebGL & canvas https://threejs.org/ xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用 ...

  4. NGK DeFi Baccarat或将推动BGV成为下一个千倍币!

    目前,已经接近2020年年末,但是DeFi的热潮还在持续.近日,DeFi市场传出一道重磅利好消息,便是NGK DeFi去中心化交易系统Baccarat即将上线.届时,将会引起整个区块链市场的又一次震动 ...

  5. PAUL ADAMS ARCHITECT:爱丁堡的房屋价值创历史新高

    近日,英国知名房产公司保罗·亚当斯公司根据一组调查报告表示,今年第三季度,爱丁堡的房价再创历史新高,并向大家分析了原因. 保罗·亚当斯公司(公司编号:07635831)是英国一家著名的房地产公司,总部 ...

  6. java数据类型(进阶篇)

    public class note03 { public static void main(String[] args) { //数据类型拓展 //1.整数拓展 //进制: 二进制0b 十进制 八进制 ...

  7. .net使用CSRedis操作Redis缓存的简单笔记(新手教程)

    0.介绍 .NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Include ...

  8. A study on ILC for linear discrete systems with single delay

    论文题目就是随笔的题目,以后的随笔的命名都是如此,特此说明. 论文的主要内容是偏理论研究的,引入了离散矩阵延迟指数函数,来处理具有单时滞线性离散系统.对于离散延迟矩阵指数函数其定义为: \[e_{m} ...

  9. 知道这两个 DOM 属性区别的,头发应该不多了吧?

    你可能知道,获取和设置 DOM 元素内部文本可以用这两个属性:Node.textContent 和 Element.innerText. 乍一看,它们似乎做着完全相同的事情,但它们之间有一些微妙但重要 ...

  10. js 表格插入指定行

    js在table指定tr行上或下面添加tr行 function onAddTR(trIndex)         {             var tb = document.getElementB ...