吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20058|回复: 34
收起左侧

[移动样本分析] 还原被勒索软件加密的文件

  [复制链接]
顺利毕业 发表于 2019-3-3 23:58
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
昨天分享了一个简单锁屏型勒索软件的分析,主要是对解锁码与PIN码的获得方法,当然也包括了无码时使用adb的直接破解

今天分享一个加密文件的勒索软件,由于该软件没有进行加壳、代码混淆,故要解密文件较为容易,以下就开始进行分享啦。

1、准备一个用于测试的文件,文件名为ShunLiBiYe.txt,(我本人,哈哈哈)。文件内容见下图啦。将该txt文件放到/sdcard目录下。
3.png

2、在模拟器上安装该应用,可看出该恶意应用对自己进行了伪装:
4.png

3、运行该应用,会出现一堆的俄罗斯文字,文字内容就不具体翻译了,大致意思就是勒索啦。最中间那块黑色的,其实是打开了手机的前置摄像头,但由于现在用的是模拟器,所以就只有一团黑啦。至于为什么打开摄像头,可能就是想在心理层面进一步攻击手机所有者的心理防线吧,瞎猜的,在这里不重要,嘿嘿。
5.png

4、此时回到模拟器的/sdcard目录下,发现txt文件出现了“enc”后缀,读取后出现了一堆乱码,说明文件确实被勒索软件加密了。
6.png

5、解密的方法,跟昨天分享的破解解锁码与PIN码的方法一样,大致就是把勒索软件的apk拉到JEB里,找到文件解密的相关代码,复制到Android Studio里,稍作修改。作为示范,下面就只贴出部分代码:
7.png

6、但是稍作修改是不够的。由于本人对于Android开发尚未入门,所以难免出一些状况,但既然是分享贴,那就都发出来给大家看看吧。

7、首先是第一次报错:
8.png

原因:对sd卡没有读写的权限,故listFiles()就无法返回/sdcard目录下的列表,所以在AndroidManifest.xml中增加相应需要的权限:
9.png

8、第二次报错:
10.png

原因:在将JEB中相关代码复制到Android Studio时,未复制下图中第一个红色框框中的代码,导致v11其实是个空的byte[](即上图中的b变量,此处b与v11是同一个,只是我在改bug时进行了下修改而已。),进而影响了key值。
11.png

9、将解密前后的文件对比进行展示:第一个图是在Android Studio的Logcat直接展示,第二个图是回到/sdcard目录下进行查看(/mnt/sdcard与/sdcard其实是指向同一个位置的)
12.png

13.png

10、在复制黏贴时有些小操作就不多说了,直接附上相关代码吧:

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
protected voidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        getFileNames(new File(Environment.[i]getExternalStorageDirectory[/i]().toString()));
        Iterator v3 = this.filesToDecrypt.iterator();
        while(v3.hasNext()) {
            Object v2 = v3.next();
            String encryptedFile=String.[i]valueOf[/i](v2);
            String originFile=encryptedFile.substring(0,encryptedFile.lastIndexOf("."));
            try {
                Log.[i]i[/i]("encryptedFile",encryptedFile);
                Log.[i]i[/i]("originFile",originFile);
                decrypt(encryptedFile, originFile);  // A.txt.enc,  A.txt
                fileContent("encryptedFile", encryptedFile);
                fileContent("decryptedFile", originFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public ArrayList filesToDecrypt=new ArrayList();
    public void fileContent(String fileType, String fileName) throws IOException {
        FileInputStream v3 = new FileInputStream(fileName);
        Log.[i]i[/i](fileType,fileName);
        InputStream inputStream = v3;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer buffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null){
            buffer.append(line);
        }
        String encrypted= buffer.toString();
        Log.[i]i[/i](fileType,encrypted);
    }
 
    public void decrypt(String encryptedFile, String originFile) throws Exception {  // A.txt.enc,  A.txt
        MessageDigest v0 = MessageDigest.[i]getInstance[/i]("SHA-256");
        v0.update("jndlasssf074sacxcsadasdadzczxcwr".getBytes("UTF-8"));
        byte[] v11 = new byte[32];
        System.[i]arraycopy[/i](v0.digest(), 0, v11, 0, v11.length);
 
        Cipher cipher=Cipher.[i]getInstance[/i]("AES/CBC/PKCS7Padding");
        SecretKeySpec key = new SecretKeySpec(v11, "AES");
 
        AlgorithmParameterSpec spec = new IvParameterSpec(new byte[16]);
        FileInputStream v3 = new FileInputStream(encryptedFile);
        FileOutputStream v4 = new FileOutputStream(originFile);
        cipher.init(2, key, spec);
        CipherInputStream v1 = new CipherInputStream(((InputStream)v3), cipher);
        byte[] v2 = new byte[8];
        int v00;
        while(true) {
             v00= v1.read(v2);
            if(v00 == -1) {
                break;
            }
            v4.write(v2, 0, v00);
        }
        v4.flush();
        v4.close();
        v1.close();
    }
 
    private void getFileNames(File arg8) { // arg8即:new File(Environment.getExternalStorageDirectory().toString())
//        List extensionsToDecrypt= Arrays.asList(new String[]{"enc"});
        File[] v2 = arg8.listFiles();
        int v1;
        for(v1 = 0; v1 < v2.length; ++v1) {
            File v4 = new File(arg8.getAbsolutePath(), v2[v1].getName());
            if(!v4.isDirectory() || v4.listFiles() == null) {
                String v3 = v4.getAbsolutePath();
                String v0 = v3.substring(v3.lastIndexOf(".") + 1);
//                if(extensionsToDecrypt.contains(v0)) {
                if(v0.equals("enc")) {
                    filesToDecrypt.add(v4.getAbsolutePath());
                }
            }
            else {
                this.getFileNames(v4);
            }
        }
    }


记得加权限

11、至于该不该把这个勒索软件的apk直接分享出来,又或是分享md5之类的,emmmmmm, 隔壁贴大神出于安全的考虑是不分享的,那我就紧随大神了。
1.png
2.png

免费评分

参与人数 10威望 +1 吾爱币 +15 热心值 +6 收起 理由
古辛 + 1 谢谢@Thanks!
fangchang819 + 1 谢谢@Thanks!
sayhi1984 + 1 + 1 卧了个草,手机也有勒索了......
17315044449 + 1 + 1 我很赞同!
lookerJ + 1 热心回复!
zwc123xyz + 1 + 1 用心讨论,共获提升!
willJ + 1 + 6 感谢发布原创作品,吾爱破解论坛因你更精彩!
yiwai2012 + 1 + 1 现在得新手入门门槛都这么高了么
执子晨 + 1 + 1 谢谢@Thanks!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

 楼主| 顺利毕业 发表于 2019-3-4 17:54
fxfnfxy 发表于 2019-3-4 17:37
我电脑也中了个勒索病毒,所有文件名后缀加CHAR都打不了。这个怎么办,论坛里哪们大神有空能破解下么……

不好意思,我目前只对Android的有些了解,其他的还未接触学习过。说不定你可以发个求助帖???
 楼主| 顺利毕业 发表于 2019-3-16 10:30
sunsocen 发表于 2019-3-15 01:07
这个真的厉害了,我服了,这样都能还原那就不用怕勒索病毒了

还是怕的,我分享的这个勒索软件比较简单,它不进行混淆加密之类的操作,否则还原起来就很麻烦了。
菠菜汤 发表于 2019-3-4 07:08
nizhenyoumo 发表于 2019-3-4 08:12
小白看不懂  感谢分享  收藏先
hxp.china.sh 发表于 2019-3-4 09:40
这个给人家解密收费比较吃香   
 楼主| 顺利毕业 发表于 2019-3-4 09:46
菠菜汤 发表于 2019-3-4 07:08
能否制作一个破解
工具

针对这个勒索软件作一个破解工具应该是可以的,但可能不适用其他变种。
 楼主| 顺利毕业 发表于 2019-3-4 09:46
nizhenyoumo 发表于 2019-3-4 08:12
小白看不懂  感谢分享  收藏先

请问哪一块我写得不够清楚呢?我可以再进一步解释解释
 楼主| 顺利毕业 发表于 2019-3-4 09:52
hxp.china.sh 发表于 2019-3-4 09:40
这个给人家解密收费比较吃香

分享帖,收费什么的,暂时还没想法,哈哈哈哈
huqfox 发表于 2019-3-4 12:17
给楼主点赞,学习学习
fnre 发表于 2019-3-4 14:10
感谢分享
FENGMUTIAN 发表于 2019-3-4 14:49
感谢大佬的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-31 06:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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