【练习】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 ...
随机推荐
- Codeforces Round #261 (Div. 2) E
Description Pashmak's homework is a problem about graphs. Although he always tries to do his homewor ...
- 1-13Object类之toString方法
Object中的toString方法 SUN在Object类中设计toString方法的目的:返回java对象的字符串表示形式. 在现实的开发过程中,Object中的toString方法就是要被重写的 ...
- 18.5.2动态代理和AOP
----此处是JDK动态代理----package d18_5_2; public interface IDog { void info(); void run(); } package d18_5_ ...
- pyinstaller打包遇到的错误处理
在python环境中运行中没问题,但打包时遇到以下问题 1.有时打包出现 UnicodeDecodeError错误, 可以改变cmd的编码(暂且这么叫),在cmd 中输入 chcp 65001,再次打 ...
- 141 Linked List Cycle 环形链表
给定一个链表,判断链表中否有环.补充:你是否可以不用额外空间解决此题?详见:https://leetcode.com/problems/linked-list-cycle/description/ J ...
- PropTypes 和组件参数验证
我们来了到了一个非常尴尬的章节,很多初学的朋友可能对这一章的知识点不屑一顾,觉得用不用对程序功能也没什么影响.但其实这一章节的知识在你构建多人协作.大型的应用程序的时候也是非常重要的,不可忽视. 都说 ...
- 字符串、数组、json
一.字符串 string 1.字符串的定义: (1).var s="haha"; (2).var s=new string ("hello") 对象形式定义 2 ...
- 雪碧图(background-position)、overflow、title中的小图标、光标、rgb 和opacity 与rgba
一.background-position 雪碧图 我们的html和css中有三个属性可以向服务器发送请求:src url href 1.我们为什么使用雪碧图? 因为我们使用雪碧图之 ...
- android控件之webview和js与java交互
首先添加权限:<uses-permission android:name="android.permission.INTERNET"/> 布局文件: <Relat ...
- EditText输入手机号自动带空格
xml: <EditText android:id="@+id/edit_main" android:layout_width="match_parent" ...