打开文件,他是空白的。点两下,可以画上东西,点Check后,会弹窗,“wrong!”
可以猜一下,他需要画对某种图形或者点到某个点,就可以变成“correct”
拖进IDA里,找到主函数,F5查看伪代码。
这里调用了一大堆API,而调用这些API后,用来画了个图,关键函数sub_401130;
点进去看看,
int __stdcall sub_401130(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
HDC v4; // eax
int result; // eax
HGDIOBJ v6; // eax
HDC v7; // esi
void *v8; // esi
HRSRC v9; // eax
HGLOBAL v10; // eax
_BYTE *v11; // eax
signed int v12; // edi
_BYTE *v13; // ecx
int v14; // eax
char pv; // [esp+8h] [ebp-80h]
LONG v16; // [esp+Ch] [ebp-7Ch]
UINT cLines; // [esp+10h] [ebp-78h]
struct tagBITMAPINFO bmi; // [esp+20h] [ebp-68h]
if ( Msg <= 273 )
{
if ( Msg != 273 )
{
switch ( Msg )
{
case 1u:
v7 = GetDC(hWnd);
hbm = CreateCompatibleBitmap(v7, 200, 150);
hdc = CreateCompatibleDC(v7);
h = SelectObject(hdc, hbm);
Rectangle(hdc, -5, -5, 205, 205);
ReleaseDC(hWnd, v7);
::wParam = (WPARAM)CreateFontA(12, 0, 0, 0, 400, 0, 0, 0, 0x81u, 0, 0, 0, 0x12u, pszFaceName);
dword_4084E0 = (int)CreateWindowExA(
0,
ClassName,
WindowName,
0x50000000u,
60,
85,
80,
28,
hWnd,
(HMENU)0x64,
hInstance,
0);
SendMessageA((HWND)dword_4084E0, 0x30u, ::wParam, 0);
return 0;
case 2u:
v6 = SelectObject(hdc, h);
DeleteObject(v6);
DeleteDC(hdc);
PostQuitMessage(0);
return 0;
case 0xFu:
v4 = BeginPaint(hWnd, (LPPAINTSTRUCT)bmi.bmiColors);
BitBlt(v4, 0, 0, 200, 150, hdc, 0, 0, 0xCC0020u);
EndPaint(hWnd, (const PAINTSTRUCT *)bmi.bmiColors);
return 0;
}
return DefWindowProcA(hWnd, Msg, wParam, lParam);
}
if ( wParam == 100 )
{
GetObjectA(hbm, 24, &pv);
memset(&bmi, 0, 0x28u);
bmi.bmiHeader.biHeight = cLines;
bmi.bmiHeader.biWidth = v16;
bmi.bmiHeader.biSize = 40;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = 0;
GetDIBits(hdc, (HBITMAP)hbm, 0, cLines, 0, &bmi, 0);
v8 = operator new(bmi.bmiHeader.biSizeImage);
GetDIBits(hdc, (HBITMAP)hbm, 0, cLines, v8, &bmi, 0);
v9 = FindResourceA(0, (LPCSTR)0x65, (LPCSTR)0x18);
v10 = LoadResource(0, v9);
v11 = LockResource(v10);
v12 = 0;
v13 = v8;
v14 = v11 - (_BYTE *)v8;
while ( *v13 == v13[v14] )
{
++v12;
++v13;
if ( v12 >= 90000 )
{
sub_401500(v8);
return 0;
}
}
MessageBoxA(hWnd, Text, Caption, 0x30u);
sub_401500(v8);
return 0;
}
return 0;
}
switch ( Msg )
{
case 0x200u:
if ( dword_47D7F8 )
{
MoveToEx(hdc, x, y, 0);
LineTo(hdc, (unsigned __int16)lParam, (unsigned int)lParam >> 16);
x = (unsigned __int16)lParam;
y = (unsigned int)lParam >> 16;
InvalidateRect(hWnd, 0, 0);
}
return 0;
case 0x201u:
dword_47D7F8 = 1;
y = (unsigned int)lParam >> 16;
x = (unsigned __int16)lParam;
result = 0;
break;
case 0x202u:
dword_47D7F8 = 0;
result = 0;
break;
default:
return DefWindowProcA(hWnd, Msg, wParam, lParam);
}
return result;
}
GetDC指定hWnd为句柄,以后便可在GDI函数中用该句柄上下文环境中绘图,随后CreateCompatibleBitmap创建宽200高150的位图,CreateCompatibleDC创建上下文环境,然后那么一大通API就是用来让你在这个位图里绘图的OTZ;
一通API之后就开始Judge,首先是FindResource,然后是LoadResource,最后开始把Resource里的内容和画上去的内容逐像素点比较(拆成RGB是90000次Judge);
接着就可以使用eXeScope来dump出图片数据,然后用python恢复出图片。
(由于没带笔记本回家,家里台式机python的PIL库没弄好,图片画不了了…)
python代码(大佬写的,我正在努力)如下
from PIL import Image
width = 200
height = 150
fp = open('123', 'rb')
data = fp.read()
im = Image.frombytes('RGB', (width, height), data)
im = im.transpose(Image.FLIP_TOP_BOTTOM)
im.show()
im.save('result.bmp')
画出来是个GOT
感谢大佬:
https://blog.csdn.net/yuanyunfeng3/article/details/49791067
https://blog.csdn.net/cossack9989/article/details/79337075
蓝牙广播有四种类型的广播包:(1)可连接、非定向的广播 这种广播,可以接受对方的扫描请求(如果对方是主动扫描),可以接受对方的连接请求。 简单说,只要收到广播包,谁都可以发送扫描请求和连接请求。(2)可连接、定向广播 这种广播,不接受对方的扫描请求,只接受对方的连接请求。通常这种广播包报文仅含广播者的地址和连接发起者的地址,对方收到地址后,可以快速建立连接。 简单说,这种广播只针对特定地址的设备。(3)不可连接、非定向的广播 ..._蓝牙广播包类型
html中<el-tree :data="list" :props="defaultProps" @node-click="handleNodeClick"></el-tree>data中注册list: [{ id: 1, label: '一级 1', children: [{ id: 2, label: '二级 1-1', children: [{ _获取element的子节点
FITS(Flexible Image Transport System)格式文件是天文学数据储存的公用文件格式,在国际的天文数据存储与传输中担任着十分重要的角色。但是这种文件格式在其他科学领域并不常用,造成这方面的文件资料并不多,尤其是基础性入门的指导性说明就更少了。我本人也是初学天文的学生,对于一些特殊情况,可能学生们突然接触这类文件格式,有可能不知所措。如果老师们讲的比较详细的话,学生还能听...
Gwt在 Web 项目中的应用,Gwt适用各种Web项目,通过Java代码生成JavaScript代码。通过Eclipse Helios 的 Google Plugin 插件创建 Web 工程:File -> New -> Other.. Next -> Finish ->创建好的Project: 运行 GwtTest:右键工...
颜色系统基本 refer to http://bbs.chinavideo.org/viewthread.php?tid=4143常见的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411
配置方法一1、导入第三方的jackson包,jackson-mapper-asl-x.x.x.jar和jackson-core-asl-x.x.x.jar。 2、spring配置文件添加** <mvc:annotation-driven/><!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappin..._springmvc配置json转换器
大数据_04 【Hadoop】01 Hadoop的介绍以及发展历史02 Hadoop的历史版本介绍04 Hadoop三大公司发型版本介绍05 Hadoop的模块组成06 Hadoop集群安装部署01 Hadoop的介绍以及发展历史1. Hadoop最早起源于lucene下的Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。2. 2003年、2004年谷歌发表的三篇论文_hadoop -d
P2P网贷平台的债权转让模式究竟有哪些风险?字号 评论 邮件 纠错2016-06-01 17:41:38 来源:和讯网 作者:陈云峰 谭鸿 互联网金融专项整治持续进展,一份名为《互联网金融风险专项整治工作实施方案》在网上流传,该方案涉及到P2P、股权众筹、第三方支付、互联网保险、互联网跨界资管、互联网金融广告等多个领域。其中要求P2P和股权众筹平台,未经批准均不得从..._jquery p2p
统一建模语言 (UML) 类图,时序图,案例图,状态图, 类图:显示出类,接口,以及他们之间静态结构和关系图,类图最基本的元素是类与接口 UML 重要功能 :可视化功能,说明功能,建造功能,建文档功能 结构型图:描述系统的静态结构,显示一个系统已有的类及他们之间的静态关系有用 (类图,对象图) 行为型图:描述一个系统的动态性质 (时序图,案例图) ..._uml基础与rose建模实用教程(配套光盘中ppt和实例文件)
https://crypto.stackexchange.com/questions/72538/what-does-mulx-operation-in-snow-3g-correspond-toAccording to the spec, MULx operation is defined as -MULx maps 16 bits to 8 bits. Let V and c be 8-bit input values. Then MULx is defined: If the leftmost (_snow 3g mul alpha
《Python深度学习》2.2——imshow()函数digit = train_data[4]import matplotlib.pyplot as pltplt.imshow(digit, cmap=plt.cm.binary) #plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。其后跟着plt.show()才能显示出来plt.show()cmap:colormaps,图谱matplotlib.cm(plt.cm)是matplotlib库中内置的色彩映射函数
2 压水室设计计算2.1 螺旋形涡室设计步骤采用螺旋形涡室,其结构如图所示基圆直径D3D_3D3D3=(1.03∼1.10)D2=(1.03∼1.10)×255=262.65∼280.5=265mmD_3=(1.03\sim1.10)D_2=(1.03\sim1.10)\times255=262.65\sim280.5=265mmD3=(1.03∼1.10)D2=(1.03∼1..._蜗壳水力设计