吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 595|回复: 1
收起左侧

[求助] 大家帮忙看看这一段汇编怎么转成C++内联汇编,或者有什么更好的写法

[复制链接]
kantou 发表于 2022-8-3 01:59
![图片描述](upload/tmp/959994_A2VPGA4YA958KYG.png)
这是一段加密的代码,我想在C++通过内联汇编的方式运行这段代码。
其中函数头部[esp+0x14]的参数有点不知道怎么写。
![图片描述](upload/tmp/959994_U9BEN98G7P9VWET.png)
这是加密函数的第一层,此时eax来源于一个基地址+偏移,在内联汇编中可以通过调用call的方式正常加密。
![图片描述](upload/tmp/959994_N6999VFAVRSJDWF.png)
这是下一层,此时密钥被赋值给一个堆栈地址了,从这个位置开始我已经不知道该如何调用了。这里mov[esp+0x10],ecx的值是上一层1939ADC0地址的值。
![图片描述](upload/tmp/959994_NCZXTHPBNVRFVRQ.png)
最内层[esp+14]的值是上一层的堆栈地址,堆栈地址的值也就是1939ADC0地址的值D4A09F8C。

[C++] 纯文本查看 复制代码
__declspec(naked) void jiami(DWORD 密钥,DWORD 加密长度,DWORD 加密地址){

	__asm{

	push ebx

	push ebp

	mov ebp, dword ptr ss : [esp + 0x14]      //密钥之类的

	mov ecx, dword ptr ss : [ebp]

	push esi

	mov esi, dword ptr ss : [esp + 0x10]      //加密长度

	mov ebx, esi

	shr esi, 0x2

	and ebx, 0x3

	test esi, esi

	push edi

	mov edi, dword ptr ss : [esp + 0x18]    //加密地址

	jbe Label1

	Label2:

	dec esi

	lea eax, dword ptr ds : [ecx + esi]

	xor edx, edx

    mov eax,0xA95EDC

	div dword ptr ds : [eax]

	mov eax, dword ptr ds : [edi]

	add edi, 0x4

	mov eax, 0xA90620

	mov ecx, dword ptr ds : [edx * 4 + eax]

	add ecx, 0x2E6D23C1

	xor eax, ecx

	test esi, esi

	mov dword ptr ds : [edi - 0x4], eax

	ja Label2

	Label1:

	xor edx, edx

	mov eax, ebx

	mov eax, 0xA95EDC

	div dword ptr ds : [eax]

	mov eax, 0xA90620

	mov ecx, dword ptr ds : [edx * 4 + eax]

	test ebx, ebx

	jbe Label3

	lea esp, dword ptr ss : [esp]

	Label4:

	xor byte ptr ds : [edi], cl

	inc edi

	shr ecx, 0x8

	dec ebx

	jnz Label4

	Label3:

	mov eax, dword ptr ss : [ebp]

	imul eax, eax, 0x1F

	pop edi

	add eax, 0x8088405

	pop esi

	mov dword ptr ss : [ebp], eax

	pop ebp

	mov eax, 0x1

	pop ebx

	retn

	}

}

这是我用C++写的代码,各位帮忙看一下[esp+0x14]这里该如何赋值。
我现在一运行这一段注入的程序就崩溃了。可能后边代码也有写的不对的地方
[C++] 纯文本查看 复制代码
__asm {
		push eax
		push 加密地址
		push 加密长度
		mov eax, 0x009bc710
		call eax
		add esp, 0xC
	}

第一层CALL这样调用是可以的,后边的现在想直接运行代码不调用call了,不知道该怎么写。

4

4

3

3

2

2

1

1

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| kantou 发表于 2022-8-3 23:24
本帖最后由 kantou 于 2022-8-3 23:27 编辑

剔除掉一些无关代码测试了几个加密数据暂时测试是可以使用的。
并且加入了取密钥和加密地址 加密长度的代码。暂时算是解决了这个问题。
[Asm] 纯文本查看 复制代码
                mov eax, 0xc36b40         
                mov eax, [eax]
                mov eax, [eax + 0xa105a4]
                add eax, 0x1d8   //取密钥

                mov ecx, dword ptr ds : [eax]
                push ebx
                push esi
                mov esi, 包长
                sub esi,0x4     //取加密 长度
                mov ebx, esi
                shr esi, 0x2
                and ebx, 0x3
                test esi, esi
                push edi
                mov edi, 包地址
                add edi,0x4         //取加密地址
                jbe Label1

                Label2 :

                dec esi
                lea eax, dword ptr ds : [ecx + esi]
                xor edx, edx
                div dword ptr ds : [0xA95EDC]
                mov eax, dword ptr ds : [edi]
                add edi, 0x4
                mov ecx, dword ptr ds : [edx * 0x4 + 0xA90620]
                add ecx, 0x2E6D23C1
                xor eax, ecx
                test esi, esi
                mov dword ptr ds : [edi - 0x4], eax
                ja Label2

                Label1 :

                xor edx, edx
                mov eax, ebx
                div dword ptr ds : [0xA95EDC]
                mov ecx, dword ptr ds : [edx * 0x4 + 0xA90620]
                test ebx, ebx
                jbe Label3

                Label4 :

                xor byte ptr ds : [edi], cl
                inc edi
                shr ecx, 0x8
                dec ebx
                jnz Label4

                Label3 :

                pop edi
                pop esi
                pop ebx
        
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表