吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19769|回复: 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] 纯文本查看 复制代码
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, 2024-11-24 09:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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