BUUOJ reverse 刮开有奖

刮开有奖

这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交

 

拖到ida 找到关键函数:

BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{const char *v4; // esiconst char *v5; // ediint v7; // [esp+8h] [ebp-20030h]int v8; // [esp+Ch] [ebp-2002Ch]int v9; // [esp+10h] [ebp-20028h]int v10; // [esp+14h] [ebp-20024h]int v11; // [esp+18h] [ebp-20020h]int v12; // [esp+1Ch] [ebp-2001Ch]int v13; // [esp+20h] [ebp-20018h]int v14; // [esp+24h] [ebp-20014h]int v15; // [esp+28h] [ebp-20010h]int v16; // [esp+2Ch] [ebp-2000Ch]int v17; // [esp+30h] [ebp-20008h]CHAR String; // [esp+34h] [ebp-20004h]char v19; // [esp+35h] [ebp-20003h]char v20; // [esp+36h] [ebp-20002h]char v21; // [esp+37h] [ebp-20001h]char v22; // [esp+38h] [ebp-20000h]char v23; // [esp+39h] [ebp-1FFFFh]char v24; // [esp+3Ah] [ebp-1FFFEh]char v25; // [esp+3Bh] [ebp-1FFFDh]char v26; // [esp+10034h] [ebp-10004h]char v27; // [esp+10035h] [ebp-10003h]char v28; // [esp+10036h] [ebp-10002h]if ( a2 == 272 )return 1;if ( a2 != 273 )return 0;if ( (_WORD)a3 == 1001 ){memset(&String, 0, 0xFFFFu);GetDlgItemTextA(hDlg, 1000, &String, 0xFFFF);if ( strlen(&String) == 8 ){v7 = 90;v8 = 74;v9 = 83;v10 = 69;v11 = 67;v12 = 97;v13 = 78;v14 = 72;v15 = 51;v16 = 110;v17 = 103;sub_4010F0((int)&v7, 0, 10);memset(&v26, 0, 0xFFFFu);v26 = v23;v28 = v25;v27 = v24;v4 = sub_401000((int)&v26, strlen(&v26));memset(&v26, 0, 0xFFFFu);v27 = v21;v26 = v20;v28 = v22;v5 = sub_401000((int)&v26, strlen(&v26));if ( String == v7 + 34&& v19 == v11&& 4 * v20 - 141 == 3 * v9&& v21 / 4 == 2 * (v14 / 9)&& !strcmp(v4, "ak1w")&& !strcmp(v5, "V1Ax") ){MessageBoxA(hDlg, "U g3t 1T!", "@_@", 0);}}return 0;}if ( (_WORD)a3 != 1 && (_WORD)a3 != 2 )return 0;EndDialog(hDlg, (unsigned __int16)a3);return 1;
}

可以现将比对数组进行了一顿操作(从v7到v17)于是进到sub_4010F0函数里:

int __cdecl sub_4010F0(int a1, int a2, int a3)
{int result; // eaxint i; // esiint v5; // ecxint v6; // edx
result = a3;for ( i = a2; i <= a3; a2 = i ){v5 = 4 * i;v6 = *(_DWORD *)(4 * i + a1);if ( a2 < result && i < result ){do{if ( v6 > *(_DWORD *)(a1 + 4 * result) ){if ( i >= result )break;++i;*(_DWORD *)(v5 + a1) = *(_DWORD *)(a1 + 4 * result);if ( i >= result )break;while ( *(_DWORD *)(a1 + 4 * i) <= v6 ){if ( ++i >= result )goto LABEL_13;}if ( i >= result )break;v5 = 4 * i;*(_DWORD *)(a1 + 4 * result) = *(_DWORD *)(4 * i + a1);}--result;}while ( i < result );}
LABEL_13:*(_DWORD *)(a1 + 4 * result) = v6;sub_4010F0(a1, a2, i - 1);result = a3;++i;}return result;
}

太复杂了........直接跑一下好了(这里写的c代码,Python太弱 大神勿喷.....)

#include<bits/stdc++.h>using namespace std;int sub_4010F0(char a1[], int a2, int a3)
{int result; // eaxint i; // esiint v5; // ecxint v6; // edx
result = a3;for ( i = a2; i <= a3; a2 = i ){v5 = i;v6 = a1[i];if ( a2 < result && i < result ){do{if ( v6 > a1[result] ){if ( i >= result )break;++i;a1[v5] = a1[result];if ( i >= result )break;while ( a1[i] <= v6 ){if ( ++i >= result )goto LABEL_13;}if ( i >= result )break;v5 =i;a1[result]= a1[i];}--result;}while ( i < result );}
LABEL_13:a1[result] = v6;sub_4010F0(a1, a2, i - 1);result = a3;++i;}return result;
}char s[20]={90,74,83,69,67,97,78,72,51,110,103};int main()
{cout<<s<<endl;sub_4010F0(s,0,10);for(int i=0;i<=10;i++)cout<<s[i]<<',';cout<<endl;;
}

输出是3,C,E,H,J,N,S,Z,a,g

再来看原函数 是将第678位和345位分别调用sub_401000函数,

进去看一下发现就是个base64加密,解密之后得到WP1jMp

在根据最后的判断,可以知道前两位是UJ

所以flag就是UJWP1jMp

转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/11421263.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式测试工具

这个工具最开始是年前写的&#xff0c;原文见如下地址&#xff1a;写了一个测试正则表达式的小工具 后来快过年的时候一直忙着给票贩子送钱去了&#xff0c;没有把它写完&#xff0c;今天抽空把一些细节的功能完成了一下&#xff0c;感兴趣的朋友可以下载试用&#xff1a;点击…

快速排序的原理以及Java代码

package com.asiainfo.test;import java.util.Arrays;import sun.misc.Sort;public class QKSORT {//基本思路是&#xff1a;选择一个值为key 一般是选择左边第一个为key//先是从右向左找到小于 key 的值 将此值与 key 进行交换&#xff0c;由于key 是一个标记先不用交换 &…

BUUOJ reverse 不一样的flag

不一样的flag 是不是做习惯了常规的逆向题目&#xff1f;试试这道题&#xff0c;看你在能不能在程序中找到真正的flag&#xff01;注意&#xff1a;flag并非是flag{XXX}形式&#xff0c;就是一个’字符串‘&#xff0c;考验眼力的时候到了&#xff01; 注意&#xff1a;得到的 …

shiro学习(18):使用注解实现权限认证和后台管理三

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

摇篮与家园

今天你从你出生的医院回到家里&#xff0c;终于和爸爸妈妈团圆了。   说你"回"到家里&#xff0c;似不确切&#xff0c;因为你是第一次来到这个家。   不对&#xff0c;应该说&#xff0c;你来了&#xff0c;我们才第一次有了一个家。   孩子是使家成其为家的根…

Java中的锁分类

转:http://www.cnblogs.com/qifengshi/p/6831055.html 在读很多并发文章中&#xff0c;会提及各种各样锁如公平锁&#xff0c;乐观锁等等&#xff0c;这篇文章介绍各种锁的分类。介绍的内容如下&#xff1a; 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁…

shiro学习(19): 拦截器

1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展&#xff1b;所以如果对Filter不熟悉可以参考《Servlet3.1规范》http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理。首先下图是Shiro拦截器的基础类图&#xff1a; 1、NameableFilter Name…

关于云开发新服务“实时数据推送”,你需要了解的全在这了!

“微信小程序工程师邓坤力带你了解如何利用千呼万唤始出来的云开发实时数据推送服务打造生动的小程序和小游戏&#xff01;” 在数据库在小程序云开发中的应用一文中&#xff0c;我们了解到实时数据推送作为云开发即将上线的一项新能力&#xff0c;主要指客户端使用官方SDK发起…

MFC窗体“抽筋”

碰到的这个问题不知道用怎样的词去表达。能反映在屏幕上的就是MFC的窗体不能正常的进入&#xff0c;双击图标后&#xff0c;窗体死在那边&#xff0c;进而程序挂掉。在挂掉之前&#xff0c;窗体是不停的闪烁&#xff0c;就像抽筋一样。 产生问题的背景和条件&#xff1a; 1&…

java实现二分查找-两种方式

转:https://blog.csdn.net/maoyuanming0806/article/details/78176957 二分查找是一种查询效率非常高的查找算法。又称折半查找。 起初在数据结构中学习递归时实现二分查找&#xff0c;实际上不用递归也可以实现&#xff0c;毕竟递归是需要开辟额外的空间的来辅助查询。本文就…

shiro学习(20): 自定义过滤规则

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

css 一些 常用布局

div骨架 Code<div id"header">ss</div> <div id"container"> <div id"content">ss</div> <div id"side">ss</div> </div> <div id"pagefooter"…

BUUOJ reverse SimpleRev (爆破)

SimpleRev SimpleRev(flag需加上flag{}再提交) 注意&#xff1a;得到的 flag 请包上 flag{} 提交 拖到ida 找到关键函数&#xff1a; unsigned __int64 Decry() {char v1; // [rspFh] [rbp-51h]int v2; // [rsp10h] [rbp-50h]int v3; // [rsp14h] [rbp-4Ch]int i; // [rsp18h] …

抽象类和接口的对比

转:http://www.importnew.com/12399.html 参数抽象类接口默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话&#xff0c;它需要提供抽象类中所有声明的方法的实现。子类使用关键字…

shiro学习(21):动态添加验证规则1

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

SCOPE_IDENTITY和@@identity的区别

SCOPE_IDENTITY、IDENT_CURRENT 和 IDENTITY 是相似的函数&#xff0c;因为它们都返回插入到标识列中的值。 IDENT_CURRENT 不受作用域和会话的限制&#xff0c;而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。调用它时必须提供表示表名的字符…

HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40874 Accepted Submission(s): 16228 Problem Description Speakless很早就想出国&#xff0c;现在他已经考完了所有需要的考试&#xff0c;准…

索引原理及项目中如何使用索引实例分析

一.索引原理&#xff1a; 为认识索引工作原理&#xff0c;首先有必要对数据表的基本结构作一次全面的复习。 当一个新表被创建之时&#xff0c;系统将在磁盘中分配一段以8K为单位的连续空间&#xff0c;当字段的值从内存写入磁盘时&#xff0c;就在这一既定空间随机保存&#x…

shiro学习(22):动态添加验证规则2

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

HDU 1231 最大连续子序列 (动态规划)

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 43843 Accepted Submission(s): 20002 Problem Description 给定K个整数的序列{ N1, N2, ..., NK }&#xff0c;其任意连续子序列可表示为{ Ni, …