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

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

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

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

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