【练习】reserving.kr 之imageprc write up
补充:c++ builder 与 windows API经典范例
#include <vcl.h>
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
//用Bitmap简化Image1图文件叙述
Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap; //建立一新暂时设定,以利图文件16位转成8位时的最适化
BITMAPINFO bmi;
//将bmi结构所在内存初始化
memset(&bmi, , sizeof(BITMAPINFO));
//BITMAPINFO结构包含BITMAPINFOHEADER结构+RGBQUAD结构
//设置BITMAPINFOHEADER结构成员
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);//结构大小
bmi.bmiHeader.biWidth = Bitmap->Width;//位图宽度
bmi.bmiHeader.biHeight = Bitmap->Height; //位图高度
bmi.bmiHeader.biPlanes = ;//目的装置平面数,必为1
//转换成 8 位像素
bmi.bmiHeader.biBitCount = ; // 8位像素
//设置RGBQUAD结构成员
DWORD BitMasks[];
BitMasks[] = 0xFFFF;//Blue明亮度
BitMasks[] = 0xFFFF;//Green明亮度
BitMasks[] = 0xFFFF;//Red明亮度
//将设好的RGB结构填入到RGBQUAD结构中
memcpy(bmi.bmiColors, BitMasks, sizeof(BitMasks)); unsigned char *bits;
//将BITMAPINFO结构创造一个新DIB图文件,并返回handle
HBITMAP HBmp = ::CreateDIBSection(, &bmi, DIB_RGB_COLORS,
reinterpret_cast<void **>(&bits),
NULL, NULL); if (HBmp)
{
//建立与指定DC兼容的DC
HDC Hdc = ::CreateCompatibleDC();
//选定新对象,并返回原有对象设置
HBITMAP HOldBmp = ::SelectObject(Hdc, HBmp);
try
{
//先由Image复制图像至暂时设备
::BitBlt(Hdc, , ,
Bitmap->Width, Bitmap->Height,
Bitmap->Canvas->Handle, , ,
SRCCOPY);
//再由暂时设备复制图像至Form1上
::BitBlt(Canvas->Handle, , ,
Bitmap->Width, Bitmap->Height,
Hdc, , ,
SRCCOPY);
} catch (...)
{
//先恢复原设置,再释放对象
::DeleteObject(::SelectObject(Hdc, HOldBmp));
//释放DC
::DeleteDC(Hdc);
}
//先恢复原设置,再释放对象
::DeleteObject(::SelectObject(Hdc, HOldBmp));
//释放DC
::DeleteDC(Hdc);
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
{
//在内存中配置一个新图文件
//在Unit1.h中加入 #include <memory>
std::auto_ptr<Graphics::TBitmap> Bitmap(new Graphics::TBitmap());
//设置长宽
Bitmap->Width = Image1->Picture->Bitmap->Width;
Bitmap->Height = Image1->Picture->Bitmap->Height;
//设置为8位图文件
Bitmap->PixelFormat = pf8bit;
//将Image1复制至此新图文件,并最适化
::BitBlt(Bitmap->Canvas->Handle, , ,
Bitmap->Width, Bitmap->Height,
Image1->Canvas->Handle, , ,
SRCCOPY);
//再将此图文件指派回Image1
Image1->Picture->Bitmap->Assign(Bitmap.get());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//释放所有图文件
for(int i=;i<ComponentCount;i++)
if (Components[i]->ClassNameIs("TBitmap"))
delete Components[i]; }
//---------------------------------------------------------------------------
这种代码完全看不懂,先把过程照着wp写下来,之后慢慢 分析吧,首先字符 wrong定位到算法函数:

如图为主函数:

用exescope导出dump如图

于是写出脚本,拷贝别人的:
from PIL import Image
width = 200
height = 150
image_file = open('Data_1.bin', 'rb')
data = image_file.read()
image = Image.frombuffer('RGB', (width, height), data, 'raw', 'RGB')
image = image.transpose(Image.FLIP_TOP_BOTTOM)
image.show()
image_file.close()
于是得到了这张图片

【练习】reserving.kr 之imageprc write up的更多相关文章
- 【练习】reserving.kr之easy ELF
打开主函数: int __cdecl main() { int result; // eax@2 write(, "Reversing.Kr Easy ELF\n\n", 0x17 ...
- 【练习】reserving.kr 之Direct3D FPS
算法函数如图,关键点在标志处,加密字符串如下图 于是写如下脚本: flag_c='436B666B62756C694C455C455F5A461C07252529701734390116494C201 ...
- pwnable.kr的passcode
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...
- [转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 转载自:http://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boy ...
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 ...
- pwnable.kr bof之write up
这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...
- pwnable.kr col之write up
Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...
- pwnable.kr brainfuck之write up
I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...
- pwnable.kr login之write up
main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...
随机推荐
- Linux下备份MySQL数据库的Shell脚本
数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...
- C++构造函数与析构函数的解析
创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值. 注意,类的数据成员是不能在声明类时初始化的.如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化.如: clas ...
- UvaLive6441(期望概率dp)
1.涉及负数时同时维护最大和最小,互相转移. 2.考场上最大最小混搭转移WA,赛后发现如果是小的搭小的,大的搭大的就可过,类似这种: db a = (C[i] - W[i]) * dp1[i - ][ ...
- 模板——扩展欧几里得算法(求ax+by=gcd的解)
Bryce1010模板 /**** *扩展欧几里得算法 *返回d=gcd(a,b),和对应等式ax+by=d中的x,y */ long long extend_gcd(long long a,long ...
- Apache Kylin的核心概念
不多说,直接上干货! 1.表(table):This is definition of hive tables as source of cubes,在build cube 之前,必须同步在 kyli ...
- PowerShell~文件操作和对象遍历
ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...
- 构建微服务开发环境6————利用npm安装前端框架
[内容指引] 安装JQuery组件: 安装BootStrap前端框架; 安装AngularJs前端框架: 安装angular动画模块: 安装angular的ui-router模块. 一.进入下载的目标 ...
- 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】
上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...
- IOS动画之抖动
-(void)shakeView:(UIView*)viewToShake { CGFloat t =2.0; CGAffineTransform translateRight =CGAffineT ...
- docker新手入门(基本命令以及介绍)
Docker 的核心内容 镜像 (Image) 容器 (Container) 仓库 (Repository) Registry 用来保存用户构建的镜像 docker的开始使用: 1. docker ...