Security Tips:ELF 破解及几点启示

如何破解一个 ELF 文件:hackme: Deconstructing an ELF File

几点启示:

  • 编译时要使用 strip 选项
  • 避免在代码中使用字符串常量存放敏感信息,strings 工具可以轻易 dump 出来
  • 在调用库函数、系统函数时,避免在参数中传递明文的敏感信息, ltrace, strace 等工具可以轻易调试出来

另外,在Java代码中,也要避免使用明文字符串保存敏感信息,尤其是不要用 String 来保存密码,原因主要有以下几点:

Bloom Filter 布隆过滤器

Bloom Filter 是由 Bloom 在 1970 年提出的一种多哈希函数映射的快速查找算法。
通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求 100% 正确的场合。

HashMap 的问题

HashMap 具有 O(1) 的查找复杂度,但缺点也很明显:内存利用率不高。

Python Tips

函数工具 functools

缓存类装饰器

@cache

用于自动缓存函数的返回结果(即其他语言常见的 memoize)。

使用起来非常简单,给函数增加 @cache 装饰器(Decorator)即可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from functools import cache

@cache
def factorial(n):
    return n * factorial(n-1) if n else 1

>>> factorial(10)      # 无缓存结果, 触发 11 次递归调用
3628800
>>> factorial(5)       # 直接返回缓存结果
120
>>> factorial(12)      # 触发 2 次递归调用, 其余 10 次直接使用缓存的结果
479001600

由于缓存是通过字典来实现的,key 就是函数的参数,所以,参数必须是 hashable 的。

Linux Tips: 只读文件 Immutable files

  • 查看文件属性

    1
    2
    
    $ lsattr filename
    ----i--------  filename
    

    字母 i 意味着该文件是一个 Immutable (只读)文件。

  • 设置只读属性:

    1
    
    $ chattr +i filename
    
  • 去掉只读属性:

    1
    
    $ chattr -i filename
    

Git Tips

安全的强推 push —froce-with-lease

推荐使用更安全的 force push 命令:

1
git push --force-with-lease

该版本可以确保,不会覆盖其他人的提交。如果有尚未 fetch 的远程提交,该命令会提示并中止执行。

定位某个 commit 合入的版本

git name-rev <commit-id>