看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕

环境:
Windows xp
工具:
IDA
EXEINFOPE
OD

0x00 查壳
EXEINFOPE查壳,
无壳

0x01 分析

    if ( (unsigned __int16)wParam == 0x40B )    // 成功{*(_OWORD *)v22 = xmmword_41DB98;v25 = 0;v23 = xmmword_41DBA8;v24 = xmmword_41DBB8;memset_4039D0(&v26, 0, 150);MessageBoxW(hWnd, v22, L"Successed", 0);return 0;}if ( (unsigned __int16)wParam == 0x40C ){sub_402970((_WORD *)lParam, &v21);v9 = (_WORD *)sub_402CD6(2 * (v21 + 1) | -((unsigned __int64)(unsigned int)(v21 + 1) >> 31 != 0));strcpy_402870((int)v9, (_WORD *)lParam);sub_4029B0(v9);sub_402A00(v9);memset_4039D0((_BYTE *)v22, 0, 200);strcpy_402870((int)v22, v9);release_402CDF(v9);v10 = 0;if ( v22[0] ){v11 = 0;v12 = v22;do{++v10;*v12 ^= *(_WORD *)(v11 + lParam);v11 = 2 * v10;v12 = &v22[v10];}while ( *v12 );}if ( sub_402810((char *)lParam, (char *)v22) )SendMessageW(hWnd, 0x111u, 0x40Au, 0);return 0;}if ( (unsigned __int16)wParam == 1039 )     // 0x40F{MessageBoxW(0, L"something you lost!", L"Failed", 0);return 0;}return DefWindowProcW(hWnd, 0x111u, wParam, lParam);}if ( (unsigned __int16)wParam == 0x40A ){*(_OWORD *)Text = xmmword_41DB60;v28 = xmmword_41DB70;v29 = xmmword_41DB80;_mm_storel_epi64((__m128i *)&v30, _mm_loadl_epi64((const __m128i *)&qword_41DB90));memset_4039D0(&v31, 0, 44);MessageBoxW(hWnd, Text, L"Failed", 0);return 0;}`

可知wParam == 0x40B时弹出成功对话框。

  if ( a1 ){if ( a2 )                                   // 第2次调用时执行这里{v8 = debug_4048DE();memset_4039D0(&String, 0, 200);GetWindowTextW(*((HWND *)v2 + 3), &String, 200);// 读取输入内容v4 = 0;                                   // 输入内容长度v5 = &String;if ( String ){do{++v5;++v4;}while ( *v5 );}v6 = (_WORD *)sub_402CD6(2 * (v4 + 1) | -((unsigned __int64)(v4 + 1) >> 31 != 0));if ( debug_4048DE() - v8 > 2 )            // 猜测是测试是否在被调试{sub_404BB1();JUMPOUT(*(_DWORD *)byte_401E45);}strcpy_402870((int)v6, &String);          // v6是个地址,输入内容长度xor0x5if ( v4 >= 7 ){if ( v4 <= 7 )                          // 输入内容长度是否为7{sub_401A60((int)v2, v6);              // 下一关return;}v7 = 0x40D;}else{v7 = 0x40E;}SendMessageW(*((HWND *)v2 + 1), v7, 0, 0);release_402CDF(v6);return;}if ( sub_401C00(a1)                         // 检查输入内容是否含有'b'&& (memset_4039D0(&String, 0, 200),GetWindowTextW(*((HWND *)v2 + 3), &String, 100),sub_402A50(v3, (__int16 *)&String, 'p')) )// 检查输入内容是否含有'p'{sub_401CB0(v2, 1);}else{SendMessageW(*((HWND *)v2 + 1), 0x111u, 0x40Fu, 0);}}

首先是判断输入内容里是否含有’b’、'p’这两个字符
然后再判断输入内容长度是否为7

  do{v18 = v3[v17];if ( v18 >= 0x61 && v18 <= 0x7A )v3[v17] = v18 - 32;++v17;}while ( v17 < v15 );                      // 输入内容小写字母转大写}
do{if ( v20 ){v23 = *v22;                             // 输入内容v24 = v33;                              // A-Zv25 = 0;while ( v23 != *v24 )                   // 判断输入的字符是否在表中{v24 = &v33[++v25];if ( !v33[v25] )                      // 是否超出A-Z范围goto LABEL_37;}*(_WORD *)v21 = v33[v25];               // 在范围里的话就保存起来v21 = (__int64 *)((char *)v21 + 2);
LABEL_37:v20 = v33[0];}v22 = &v3[++v19];                         // 下一个字符}while ( v3[v19] );

如果输入的内容是字母就保存起来。

 v27 = &v35;                                   // 提取出来的字符if ( (_WORD)v35 ){do{v27 = (__int64 *)((char *)v27 + 2);++v26;}while ( *(_WORD *)v27 );if ( v26 == 2 )                             // 如果有两个字符是在表中{LODWORD(v35) = 0x350031;                  // 这里确定了输入内容第3位到第6位只能是15pbHIDWORD(v35) = &unk_420050;v28 = v3 + 2;v36 = 0;v29 = 0;while ( *((_WORD *)&v35 + v29) == *v28 ){++v29;++v28;if ( v29 >= 4 ){if ( !sub_401740((_DWORD *)v2, v3) )  // v2尝试次数break;v31 = 0x40B;return PostMessageW(*(HWND *)(v2 + 4), 0x111u, v31, 0);// 成功}}}}v31 = 0x40A;return PostMessageW(*(HWND *)(v2 + 4), 0x111u, v31, 0);

统计输入内容是字母的个数,不等于2个就错误。
然后将输入内容与常数值比较,不满足也错误。

 do{*(_WORD *)v4 = v5;v4 = (__int128 *)((char *)v4 + 2);          // 将1-9放入v4++v5;}while ( v5 <= 0x39 );v6 = 0;v7 = v2;if ( v2 && *v2 ){do{++v7;++v6;                                     // 计算输入长度}while ( *v7 );}v8 = sub_4028D0((char *)&v20, &v2[*v3]);      // 将1-9和输入的内容拼接,开始位置为尝试的次数v9 = &v2[v6 - 1];                             // 取最后一个字符v19 = v8;v10 = 0;v17 = v9;if ( (_WORD)v20 ){v11 = (char *)&v20;v12 = *v9 & 1;while ( 1 ){v13 = v12 + (*(_WORD *)v11 >> 2);if ( v13 == 0x32 )break;if ( v13 != 0x64 ){v11 = (char *)&v20 + 2 * ++v10;         // 下一个字符if ( *(_WORD *)v11 )continue;}v8 = v19;goto LABEL_12;}}else{
LABEL_12:v14 = &v20;v15 = 0x31;while ( *(_WORD *)v14 == *(_WORD *)((char *)v14 + (char *)v2 - (char *)&v20) )// 判断输入的第1个字符是否为1,// 第2个字符是否为2,由此可知前6个字符为1215pb{v15 += 6;v14 = (__int128 *)((char *)v14 + 2);if ( v15 > 0x39 ){if ( *v2 + *((_WORD *)v8 + 9) == 0x63 && *v17 == *v18 + *((_WORD *)v8 + 6) )// v8[9]=='2' && s[6]==v8[6]+尝试次数,v8[6]必定为7,// v8[9]为输入内容[尝试次数],由上面可知这个尝试次数必定为1// 则s[6]必定为'8',故结果为1215bp8return 1;                             // 一定要返回1return 0;}}}

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

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

相关文章

使用CSDN-markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

C++ vector类详解

转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器&#xff0c;它是一种顺序容器&#xff0c;支持随机访问。vector是一块连续分配的内存&#xff0c;从数据安排的角度来讲&#xff0c;和数组极其相似&#xff0c;不同的地方就是…

ViewPager的使用方法和实现过程

看图先&#xff1a; 页面中填充内容是随机关键词飞入和飞出动画效果&#xff0c;随后会更新&#xff0c;现在请先无视吧 首先是 导入jar包 下载地址&#xff1a; android-support-v4.jar 布局文件里添加viewPager布局 [html] view plaincopyprint?<android.support.v4.vi…

如何通过浏览器在所有响应内容中查找文本

使用浏览器的开发者工具查找响应文件的内容 ** Chrome ** 版本&#xff1a; 快捷键&#xff1a;CtrlShiftF 可以看到已经查找出来了 ** firefox ** 版本

【Leetcode】【Easy】Implement strStr()

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 解题&#xff1a; 本题为典型的KMP算法考察题&#xff0c;KMP算法描述为&#xff1a; 设主串S&#xff0c;匹配串P&#xff0c;i为S的索引下…

Jenkins入门指南

新手学习使用Jenkins 安装好Jenkins后如何运行脚本 1.新建item 2.输入任务名称&#xff0c;选择项目类型&#xff0c;点击确定 3.填个描述就好了&#xff0c;新手学jenkins&#xff0c;其他都不看&#xff0c;跑起来再说 4.点这个高级&#xff0c;选择你要运行的脚本所在…

Sublime Text 3 史上最性感的编辑器

↑ ↑ ↑ ↑ ↑ 请看文件夹 ↑ ↑ ↑ ↑ ↑ 下载 / 安装 windows / MAC OS 官网下载&#xff0c;双击安装&#xff0c;这个都会吧&#xff5e; linux linux下安装&#xff0c;一种办法是从官网下载 tar.bz &#xff0c;手动安装。 这里介绍用 apt-get 自己主动安装方法&#xf…

swift入门之TableView

IOS8更新了&#xff0c;oc还将继续但新增了swift语言&#xff0c;能够代替oc编写ios应用&#xff0c;本文将使用swift作为编写语言&#xff0c;为大家提供step by step的教程。 工具 ios每次更新都须要更新xcode&#xff0c;这次也不例外&#xff0c;但使用xcode6&#xff0c;须…

Jmeter BeanShell学习(一) - BeanShell取样器(一)

通过利用BeanShell取样器设置请求发送的参数。 第一步&#xff1a;添加BeanShell取样器 第二步&#xff1a;在BeanShell中输入执行的代码 log.info("脚本开始执行"); //意思是将字符串输出到日志消息中 vars.put("username","123163.com");//…

Jmeter BeanShell学习(一) - BeanShell取样器(二)

利用BeanShell取样器获取接口返回的JSON格式的结果&#xff0c;并将该结果写入到文件。 第一步&#xff1a;添加BeanShell取样器 前面几个取样器的内容查看&#xff1a; https://blog.csdn.net/goodnameused/article/details/96985514 第二步&#xff1a;查看返回的结果格式 …

160 - 50 DueList.5

环境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查壳 可以看出程序有加壳&#xff0c;那么我们下一步就是脱壳了。 0x01 脱壳 看上去没什么特别的地方&#xff0c;就直接 单步跟踪法 来脱壳吧 近call F7&#xff0c;远call F8 来到这里 哈&…

关键路径的概念和算法

AOE网&#xff1a;在一个表示工程的带权有向图中&#xff0c;用顶点表示事件&#xff0c;用有向边表示活动&#xff0c;边上的权值表示活动的持续时间&#xff0c;称这样的有向图叫做边表示活动的网&#xff0c;简称AOE网。AOE网中没有入边的顶点称为始点&#xff08;或源点&am…

160 - 51 DueList.6

环境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查壳 发现程序没有加壳&#xff0c;那么我们可以直接分析了。 0x01 分析 运行程序看一看 看到错误信息的字符串后我们可以直接搜索了。 可以看到程序会比较输入的长度是否为8位&#xff0c;如…

160 - 52 egis.1

环境&#xff1a;windows xp 工具&#xff1a; 1、OllyDBG 2、exeinfo 3、IDA 0x00 查壳 加了UPX壳&#xff0c;那么就要脱壳了。可以使用单步法来脱壳。 UPX壳还是比较简单的&#xff0c;开头pushad&#xff0c;找个popad&#xff0c;然后就是jmp了。 然后就可以用OD来…

玩转MySQL之Linux下的简单操作(服务启动与关闭、启动与关闭、查看版本)

小弟今天记录一下在Linux系统下面的MySQL的简单使用&#xff0c;如下&#xff1a; 服务启动与关闭 启动与关闭 查看版本 环境 Linux版本&#xff1a;centeros 6.6&#xff08;下面演示&#xff09;&#xff0c;Ubuntu 12.04&#xff08;参见文章末尾红色标注字体&#xff09; M…

实验八第二题

转载于:https://www.cnblogs.com/huangsilinlana/p/3411550.html

敏捷自动化测试(1)—— 我们的测试为什么不够敏捷?

测试是为了保证软件的质量&#xff0c;敏捷测试关键是保证可以持续、及时的对软件质量情况进行全面的反馈。由于在敏捷开发过程中每个迭代都会增加功能、修复缺陷或重构代码&#xff0c;所以在完成当前迭代新增特性测试工作的同时&#xff0c;还要通过回归测试来保证历史功能不…

ios 程序学习

马上着手开发iOS应用程序&#xff1a;五、提交应用与寻找信息 2013-01-11 15:36 佚名 apple.com 我要评论(0) 字号&#xff1a;T | T本文介绍了您已经学习完如何开发一个优秀的iOS应用之后&#xff0c;应该掌握的内容&#xff0c;包括将您的应用提交到App Store让其他人下载&am…

lucene4入门(2)搜索

欢迎转载http://www.cnblogs.com/shizhongtao/p/3440479.html 接着上一篇&#xff0c;这里继续搜索&#xff0c;对于搜索和创建一样&#xff0c;首先你要确定搜索位置&#xff0c;然后用规定的类来读取。还要注意一点&#xff0c;确定分词器&#xff0c;因为不同的分词器所创建…

Topcoder SRM 648 (div.2)

第一次做TC全部通过&#xff0c;截图纪念一下。 终于蓝了一次&#xff0c;也是TC上第一次变成蓝名&#xff0c;下次就要做Div.1了&#xff0c;希望div1不要挂零。。。_(:зゝ∠)_ A. KitayutaMart2 万年不变的水题。 #include<cstdio> #include<cstring> #include&…