逆向刷题----[FlareOn4]IgniteMe

今日份学习清单:get到两个新函数__ROL4__()函数和GetStdHandle()函数,循环右移和左移

1、查壳:

无壳32位程序

2、IDA启动:

打开主函数进行分析:

可以看到此处有一个GetStdHandle()函数

HANDLE WINAPI GetStdHandle(
  _In_ DWORD nStdHandle
);

GetStdHandle()函数:

检索指定标准设备的句柄(标准输入、标准输出或标准错误)

GetStdHandle 返回的句柄可供需要在控制台中进行读取或写入的应用程序使用。 创建控制台时,标准输入句柄是控制台输入缓冲区的句柄,而标准输出和标准错误句柄则是控制台的活动屏幕缓冲区的句柄。 这些句柄可供 ReadFileWriteFile 函数使用,也可供访问控制台输入缓冲区或屏幕缓冲区的任何控制台函数(例如 ReadConsoleInputWriteConsoleGetConsoleScreenBufferInfo 函数)使用。

可以为下面的输入输出做准备

GetStdHandle 函数 - Windows Console | Mi
crosoft Learn

我们点开其中的可以发现里面有好长的字符,我们可以猜测他输入了一些数据

我们继续分析其他函数,4010F0这个函数,他的作用是检查最后一个字符是不是回车什么的,如果是我们就结束输入进行判断,下面的if语句里面是进行加密的,分析一下:

可以看到最后是一个异或比较,所以倒推找其进行修改的地方

可以发现有一个_ROL4_函数,先分析一下这个函数:

3、_ROL4_()函数

_ROL4_函数 的功能是循环左移,位移时最高位不舍弃,将最高位挪回最低位 比如二进制数据 10000,循环左移2位后得到00010

两个参数,第一个参数是要进行左移的数据,第二个是要进行移位的长度

同时我们也可以类比一下ROR4函数,就是循环右移函数,使用和上面一样

对于这个题目,就是将-2147024896循环左移4位,然后再右移一位,我们可以看看他的值

首先这个值是0x80070000

接着循环左移4位:0x700008  (因为是16进制,移动一位就是移动二进制的四位)

最后右移一位:0x380004

所以这个v4=0x380004

接着倒序进行异或,进行一次循环然后将v4开始改为其输入的值

4、解密脚本:

flags=[0]*40
x=-2147024896
tmp=0x380004
data2=[0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C,
  0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E,
  0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13,
  0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69,0x00]
for i in range(len(data2)-1,-1,-1):
    flags[i]=(data2[i]^tmp)&0xff
    tmp=flags[i]
for i in range(len(data2)):
    print(chr(flags[i]),end='')

答案:R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com手动加上flag

flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}

至此完成,通过此题,要学会到进行逆向时要注重细节,不要放过这些仅仅只有一个表达式的函数,而且我们也要多认识一些这样的函数


 

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-upload是element-ui提供的一个文件上传组件,可以实现上传文件的功能。关于回显PDF,需要在上传文件成功后,在回调函数中获取到上传成功后的文件地址,然后使用PDF.js库进行PDF文件的渲染。 具体实现可以参考以下步骤: 1. 在el-upload组件中设置上传成功后的回调函数,将上传成功后的文件地址保存到data中; 2. 在页面中引入PDF.js库; 3. 在mounted钩子函数中初始化PDF.js库; 4. 在watch中监听data中文件地址的变化,一旦变化就使用PDF.js库进行渲染。 示例代码如下: ``` <template> <el-upload class="upload-demo" action="/upload" :on-success="handleUploadSuccess"> <el-button slot="trigger">选取文件</el-button> <el-button type="primary" slot="tip">上传文件</el-button> </el-upload> <div id="pdf-container"></div> </template> <script> import pdfjsLib from 'pdfjs-dist' export default { data() { return { fileUrl: '' // 保存上传成功后的文件地址 } }, mounted() { pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.4.456/pdf.worker.min.js' }, watch: { fileUrl(newValue) { if (newValue) { this.renderPdf(newValue) } } }, methods: { handleUploadSuccess(response) { this.fileUrl = response.data.url }, async renderPdf(url) { const loadingTask = pdfjsLib.getDocument(url) const pdf = await loadingTask.promise const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') const scale = 1.5 const viewport = pdf.getPage(1).getViewport({ scale }) canvas.height = viewport.height canvas.width = viewport.width const renderContext = { canvasContext: ctx, viewport: viewport } pdf.getPage(1).render(renderContext) document.getElementById('pdf-container').appendChild(canvas) } } } </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值