Re: C是否能指定函数在特定内存 执行后抹除?

楼主: descent (“雄辩是银,沉默是金”)   2018-03-16 18:27:09
不是很确定和你要的是不是一样?
在 memset 之后, f1() 就会被抹除,
无法执行 f1()
此环境在 linux 下执行, 在 stm32 应该会更简单。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <cstring>
#include <stdint.h>
#include <unistd.h>
#include <sys/mman.h>
void f1()
{
printf("xx f1\n");
}
void f2()
{
printf("xx f2\n");
}
int main(int argc, char *argv[])
{
f1();
f2();
auto len = ((char *)f2-(char *)f1);
auto pagesize = getpagesize();
printf("pagesize: %d\n", pagesize);
uintptr_t b = (((uintptr_t)f1)+4095 & (~4095));
b = (uintptr_t)f1 - (uintptr_t)f1 % pagesize;
printf("f1: %p\n", f1);
printf("b: %p\n", b);
if (0 == mprotect((void*)b, pagesize, PROT_WRITE|PROT_READ|PROT_EXEC))
{
printf("set to write|read|exec\n");
}
else
{
perror("mprotect fail\n");
}
memset((void*)f1, 0, len);
f2();
f1();
//printf("len: %p\n", len);
return 0;
}
※ 引述《lazyblack (懒黑)》之铭言:
: 用eclipse编译 stm32 希望增加反编译难度 请问是否能指定特定位址给函数 以便单次执
: 行后抹除?听某些人说修改linker档可达成有前辈知道大概要怎么做吗?
: 另外也想问算出来的密钥储存的内存位址,会对反编译难度造成影响吗?
: 还是说以上作法都是自嗨,无法根本提升破解困难度?
: 还望各位给予各种建议或方向,谢谢。
作者: cs8425 (cs)   2018-03-16 19:31:00
你的认知错误喔 MCU比较麻烦MCU的ROM是flash 不能直接memset要call专门的API去抹写 通常会有page size限制除非函数的code放在RAM 才能用你这招问题是这作法ROM也会有一份code...

Links booklink

Contact Us: admin [ a t ] ucptt.com