欢迎光临
我们一直在努力

Android锁屏密码加密算法分析

LinuxBaradmin阅读(265)评论(0)

什么是salt hash(加盐哈希)?

hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1

加盐hash本质上就是在原生密码的基础上拼接一个随机的字符串,然后再进行hash密码加密,这样可以防止A网站泄露数据后影响同账户B网站的数据安全性。

当你在用hash的时候,一定要想清楚,你要的是快速查找性还是数据安全性。

/*
     * Generate a hash for the given password. To avoid brute force attacks, we use a salted hash.
     * Not the most secure, but it is at least a second level of protection. First level is that
     * the file is in a location only readable by the system process.
     * @param password the gesture pattern.
     * @return the hash of the pattern in a byte array.
     */
    public byte[] passwordToHash(String password, int userId) {
        if (password == null) {
            return null;
        }
        String algo = null;
        byte[] hashed = null;
        try {
            byte[] saltedPassword = (password + getSalt(userId)).getBytes();
            byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
            byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword);
            hashed = (toHex(sha1) + toHex(md5)).getBytes();
        } catch (NoSuchAlgorithmException e) {
            Log.w(TAG, "Failed to encode string because of missing algorithm: " + algo);
        }
        return hashed;
    }

private String getSalt(int userId) {
        long salt = getLong(LOCK_PASSWORD_SALT_KEY, 0, userId);
        if (salt == 0) {
            try {
                salt = SecureRandom.getInstance("SHA1PRNG").nextLong();
                setLong(LOCK_PASSWORD_SALT_KEY, salt, userId);
                Log.v(TAG, "Initialized lock password salt for user: " + userId);
            } catch (NoSuchAlgorithmException e) {
                // Throw an exception rather than storing a password we'll never be able to recover
                throw new IllegalStateException("Couldn't get SecureRandom number", e);
            }
        }
        return Long.toHexString(salt);
    }

Android可执行文件

LinuxBaradmin阅读(175)评论(0)

DEX文件格式其实就像Windows上的PE文件、Linux上的ELF文件格式一样。就是一套规范。

每个apk文件其实就是一个zip压缩包,解压后会发现它由一些图片资源与其他文件组成,而且每个APK文件中包含一个class.de文件,这个文件就是Android系统Dalvik虚拟机的可执行文件。

ELF文件头:

struct Elf32_Ehdr {
  unsigned char e_ident[EI_NIDENT]; // ELF Identification bytes
  Elf32_Half    e_type;      // Type of file (see ET_* below)
  Elf32_Half    e_machine;   // Required architecture for this file (see EM_*)
  Elf32_Word    e_version;   // Must be equal to 1
  Elf32_Addr    e_entry;     // Address to jump to in order to start program
  Elf32_Off     e_phoff;     // Program header table's file offset, in bytes
  Elf32_Off     e_shoff;     // Section header table's file offset, in bytes
  Elf32_Word    e_flags;     // Processor-specific flags
  Elf32_Half    e_ehsize;    // Size of ELF header, in bytes
  Elf32_Half    e_phentsize; // Size of an entry in the program header table
  Elf32_Half    e_phnum;     // Number of entries in the program header table
  Elf32_Half    e_shentsize; // Size of an entry in the section header table
  Elf32_Half    e_shnum;     // Number of entries in the section header table
  Elf32_Half    e_shstrndx;  // Sect hdr table index of sect name string table
  bool checkMagic() const {
    return (memcmp(e_ident, ElfMagic, strlen(ElfMagic))) == 0;
  }
  unsigned char getFileClass() const { return e_ident[EI_CLASS]; }
  unsigned char getDataEncoding() const { return e_ident[EI_DATA]; }
};

Neural Network Methods in Natural Language Processing – Introduction

LinuxBaradmin阅读(763)评论(0)

转型DL缘由:

for more money & better life

计划:

282pages. complete training in 1 month.

target salary:

24K

神经网络架构一共分为两种:

  • feed-forward networks 支持fixed sized or with variable length inputs,disregard the order of the elements
  • recurrent/recursive networks。一般不会单独使用。rnn会和其他网络component结合在一起

本书结构:

  • machine learning basic. mlps, gradient-based training
  • apply dl to nlp
  • cnn,rnn specialized architectures
  • collection of various advanced topics:rnn for modeling trees. structured prediction models,and multi-task learning

 

 

centos下iptables简单配置

LinuxBaradmin阅读(894)评论(0)

CentOS 内置了一个非常强劲的防火墙,统称为 iptables,但更正确的名称是 iptables(用户空间)/netfilter(内核空间)。

规则分类:

INPUT,OUTPUT,FORWARD,DEFAULT

注意:iptables配置需要root权限

如果你的机器没有开启iptalbes,可以用如下命令开启:systemctl start firewalld.service

 

寒江独钓–windows内核安全编程—>第四篇键盘的过滤

LinuxBaradmin阅读(868)评论(0)

预备知识:

符号链接:设备对象的别名,实际上符号链接可以指向任何有名字的设备对象

ZwCreateFile不仅可以打开文件,而且可以打开设备对象这个函数最终调用NtCreateFile

PDO是设备栈最下面的那个设备对象

应用程序是不能直接根据设备名字打开设备的,一般都通过符号链接来打开

我们没有必要关注所有细节,现在我们只需要知道我们现在要去绑定的设备是驱动KbdClass的设备对象就可以了。

键盘过滤的框架:

DRIVER_OBJECT下有DeviceObject->NextDevice,可以表示一个设备链

另一种方法是调用函数IoEnumerateDeviceObejectList,可以枚举出一个驱动对象下所有的设备对象

找到关键回调函数的条件:(windows不可能公开这种函数的地址,所以需要我们自己去找,然后hook或者替换!!!)

1.这个函数指针应该保存在i8042prt生成的设备的自定义扩展中

2.这个函数的开始地址应该在内核模块KbClass中

3.内核模块KbClass生成的设备对象的地址也应该在那个设备扩展中,而且应该在我们要找的函数指针之前

Hook简单而又古老的技术对于截取QQ密码起到了很好的作用

触发的本质:使CPU的执行暂停,并跳到相应的中断处理函数中,中断处理函数保存在内存中,并且地址保存在IDT中,每个中断号在表中都有一项

真正的硬件中断:IRQ

IOAIPC出现后,IRQ和中断号的对应关系可以修改,在多核CPU中,每个核心都有一个IDT,应对每一个核心获取IDT

利用IOAIPC重定位中断处理函数

IOAIPC多核心CPU新型中断控制器

请简述何为IDT?有什么作用?

IDT就是中断描述符,就是一个由中断号和中断处理函数地址构成的表,当系统收到中断时就会查这个表来获取中断函数地址

请问在windows驱动中,键盘主要涉及哪几个驱动程序?

windows下

本章一共讲了哪几种过滤键盘的方法?

1.常见的设备绑定

2.hoo分发函数

3.hook掉IDT表项

4.IOAPIC进行更底层的hook,前提是内核函数的返回值在hook前后没有变化

 

 

 

Welcome to LinuxBar.org

联系我联系我