首页
社区
课程
招聘
[原创]简单粗暴的so加解密实现
发表于: 2014-8-26 21:42 167551

[原创]简单粗暴的so加解密实现

2014-8-26 21:42
167551
收藏
免费 25
支持
分享
最新回复 (116)
雪    币: 75
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
在调式的时候遇到一个问题,
在shelladdress2.c中加密后在写入文件时,偏移不对,导致运行出错
//lseek(fd, info.st_value, SEEK_SET);  应该是 info.st_value-1
lseek(fd, info.st_value-1, SEEK_SET);
        if(write(fd, content, info.st_size) != info.st_size)
        {
                puts("Write modified content to .so failed");
                goto _error;
        }
2015-2-27 14:39
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
52
嗯,这里处理得不是很好。 如果编译的指令为Thumb,那么st_value = addr + 1;如果为ARM,则st_value = addr。较好一点应该对指令进行判断分类处理。
2015-2-27 22:28
0
雪    币: 228
活跃值: (75)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
53
TK大神你好!有个问题,Android elf壳可以不可以通过修改程序入口点来实现呢?入口地址指向解壳程序,在解壳程序的结尾跳转到init_array
2015-3-3 14:17
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
54
小菜一枚,大哥不要折煞小弟了。
应该不行吧,现在的APP加固是通过SO文件来实现。 但SO文件是动态链接库,是没有入口点的吧。 加载时入口是linker。如果是一个普通可执行程序而不是APP的话,应该可以通过修改入口点来实现,就和PC平台的加壳相同了吧(个人想法,木有实践)
2015-3-3 19:14
0
雪    币: 228
活跃值: (75)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
55
多谢TK大神指导!的确这个思路不行,哈哈。
2015-3-4 10:49
0
雪    币: 238
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
56
好文章,学习下~~
2015-3-9 10:29
0
雪    币: 76
活跃值: (59)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
57
哪位能解释下ehdr.e_entry = (length << 16) + nsize的含义么,小菜表示不懂。
2015-3-14 14:50
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
这么好的贴,学习了。
2015-3-17 09:37
0
雪    币: 76
活跃值: (59)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
59
我在源码里看到修改权限时mprotect((void *) base, 4096 * nsize, PROT_READ | PROT_EXEC | PROT_WRITE) != 0, base = getLibAddr();,但起始的地址为什么不是 text_addr = ehdr->e_shoff + base;。base不是整个so的地址?应该是text_addr 段的起始地址才对?请大神指导下。。。。。
2015-3-24 21:23
0
雪    币: 234
活跃值: (38)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
60
楼主写的太好了,非常感谢,但有一点不明:
为什么要通过hash表查找函数名,elf中的符号表数据大小不是固定0x10的吗,而且连续,直接遍历查找函数名就可以
2015-5-25 11:52
0
雪    币: 105
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
支持支持,谢谢分享。。。
2015-5-27 16:02
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
必须强烈支持.学到不少东西.
2015-7-30 12:41
0
雪    币: 7
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
请教下大家,shelldemo2.zip 里的shellAdder2.c我用GCC编译一直报elf.h文件未找到,这要怎么解决。
2015-7-31 13:17
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
楼主你好,文中的“也有一些对抗dump的方法,这里就不展开了”,请问能讲讲大概思路吗。因为如果在Jni_onload之前下断的话so就已经加载进内存了,还如何对抗dump呢。请教~
2015-8-11 11:55
0
雪    币: 250
活跃值: (65)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
65
谢谢分享~
2015-8-13 10:59
0
雪    币: 67
活跃值: (53)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
66
有渗透测试APP的工作,愿意业余时间接吗。主要是要解开.so库的逻辑。年薪30万是否有意愿加盟。
2015-8-31 17:47
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
67
在吗?我遇到cacheflush在android 2.3刷新失败的问题,想求助下你
2015-9-18 11:46
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
cacheflush(起始地址, 终止地址, 0)

MOV             R0, 起始地址
MOV             R1, 终止地址
MOV             R2, #0
MOV             R7, #0xF0002
SVC             0
2015-9-18 18:05
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
69
你说的这个cacheflush已经做了,还是有崩溃,不过方法已经找到了,重新读取下刷新内存区就ok
2015-9-18 23:30
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
密码已破 哇卡卡卡
2015-10-21 19:09
0
雪    币: 9
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
小菜一枚。同样是Run ShellDemo2的代码时运行到这里出错,求教各位大神是什么原因。
2015-11-24 15:16
0
雪    币: 102
活跃值: (2055)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
72
mark
2015-12-21 12:04
0
雪    币: 36
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
73
mark
2016-1-29 13:31
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
试了下,e_type和e_machine不能改
2016-2-16 15:18
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
打印一下出错信息应该是这个吧:Cannot allocate memory
下面贴子是解决方案。
http://blog.csdn.net/smileteo/article/details/39961025

不过我出错的原因是,64位机器上面跑的。。。代码里要改成Elf64_Shdr这些64位用的结构
2016-2-17 15:34
0
游客
登录 | 注册 方可回帖
返回
//