[跟风]逆向/解密一个pyc程序,赏金12000元[已有大佬解出]
侧边栏壁纸
  • 累计撰写 57,246 篇文章
  • 累计收到 0 条评论

[跟风]逆向/解密一个pyc程序,赏金12000元[已有大佬解出]

James
2020-09-13 / 0 评论 / 182 阅读 / 正在检测是否收录...

看到昨天大佬的一个帖子,决定跟风一发顺便推销一波我们的py加密技术。

附件压缩包内为一个pyc文件,正确的输入内容即为一个对应0xd0fe5288c5320bb898498fa45fa4f7c324e1e074该以太坊地址的私钥,地址内余额5ETH(当前价值12300元)可以在此链接查看该地址余额(如果在结束时间之前被转走说明有大佬完成了游戏)
https://etherscan.io/address/0xd0fe5288c5320bb898498fa45fa4f7c324e1e074


-----------------------------------------------------
网友回复:

cc8d0a76d0ba8cab2a146c26a9b8a91e45edb5785a7d15114cf835e3c8ca9444


网友回复:

writeup:https://gist.github.com/gugutt/33e21d3b106bf1f89a7275700b5bcad5


网友回复:

这种破解,只需一块板砖

来,楼主你报下坐标

我看离的近不


网友回复:

大佬牛逼!!!


网友回复:

会玩,商业加密这个破起来怕是不简单

虽然我逆向一点也不会


网友回复:

pyc加密有啥用呢。。。直接pyinstaller二进制不好吗


网友回复:

越来越扯了,我重编译一个python,然后修改python生成的pyc编码格式,你让我反猜??没搞错吧


网友回复:

引用:nny发表于2020-9-1112:57

越来越扯了,我重编译一个python,然后修改python生成的pyc编码格式,你让我反猜??没搞错吧...


网友回复:

正确的输入内容即为一个对应0xd0fe5288c5320bb898498fa45fa4f7c324e1e074该以太坊地址的私钥

这不和BIP39是一样的东西

正确输入内容(12个范围内的单词)即获得私钥

这种还用解密么?你要不然先证明,私钥和输入的内容没有关系?

你要真想证明什么PYC加密的解密不了,还不如做个crackme发到吾爱一类的地方


网友回复:

引用:jq8778发表于2020-9-1113:31

正确的输入内容即为一个对应0xd0fe5288c5320bb898498fa45fa4f7c324e1e074该以太坊地址的私钥

这不和BIP39...


网友回复:

引用:西行寺幽幽子发表于2020-9-1113:32

不是助记词,是64位字母数字组合的传统私钥


网友回复:

引用:jq8778发表于2020-9-1113:36

你需要先证明,私钥和输入内容没有关系啊


网友回复:

PyProtect2.0

https://pyprotect.angelic47.com

应该是用了作者自创的AVM虚拟机

放弃了,等一个带手子来逆




网友回复:

引用:nekolate发表于2020-9-1114:03

PyProtect2.0

https://pyprotect.angelic47.com/


网友回复:

好像挺好玩的,不过我丢了个PY3.7的加密一下好像运行不了是不支持3.x吗

RuntimeError:Badmagicnumberin.pycfile


网友回复:

引用:nisekoi发表于2020-9-1115:02

好像挺好玩的,不过我丢了个PY3.7的加密一下好像运行不了是不支持3.x吗

RuntimeError:Badmagicnumb...


网友回复:

如果想拿赏金,需要跟踪分析,甚至逆向他的虚拟机壳,还要找指令替换表,绕过花指令之类的限制。

手工拿确实比较麻烦,但是丢到看雪,应该还是有人做过这件事情的,大胆推测一下,24小时内,奖金会被转走(楼主不诈骗,确实含有正确私钥的前提下)。

下面只说一下解题思路。

python解释器可以正常运行此pyc,于是猜测:,

1,修改了python解释器,增加了对自定义指令的支持,这种自定义很可能也就只是操作码替换。

2,通过对比混淆和未混淆的pyc的code对象co_flags标志多了什么,而且是python官方未定义的标志,就可以认为这个标志是加密标识。

于是有三种直观的思路:

1,修改code对象的代码,将其co_code属性改为可写的,co_code其实被存储为一个字符串故该操作最为简单,但是需要修改python库代码,,比较麻烦

2,分析pyc的结构,直接写C代码读取pyc并定点解析被加密的代码,这需要了解pyc的数据结构,使用010editor可以很容易的学习到,但是由于co_consts元组里的元素大小不一需要根据元素类型针对性解析,比较麻烦。

3,使用pythonapi/c直接操作python的内存,绕过python对象的数据访问限制。

在逆向分析人员面前不存在无法破解的保护,只有时间成本问题。

end


网友回复:

引用:bagheera发表于2020-9-1115:43

如果想拿赏金,需要跟踪分析,甚至逆向他的虚拟机壳,还要找指令替换表,绕过花指令之类的限制。

手工拿确...


网友回复:

引用:nekolate发表于2020-9-1114:03

PyProtect2.0

https://pyprotect.angelic47.com




网友回复:

商业加密吃饭的东西12300应该不是很多,专业的可能要更多




网友回复:

这种破解,只需一块板砖

来,楼主你报下坐标

我看离的近不


网友回复:

AVMbyAngelic47:Runtimeerror:unknownopcodes
AVMbyAngelic47(>
marshalt
syst
typest
hashlibt
_getframet
f_localst
f_globalst
strt
typet
ordt
SystemErrort
joint
chrt
hasattrt
__import__t
getattrt
f_codet
co_codet
lent
md5t
co_constst
startswitht
co_namest
co_varnamest
co_filenamet
co_namet
updatet
hexdigestt
decodet
splitt
ranget
loadst
RuntimeErrort
Falset
Nonet
f_backt
findt
Truet
get_referrersR
has_keyt
TypeErrort
localst
popt
appendt
itert
isinstancet
Exceptiont
insertR
co_argcountt
nextt
StopIterationt
listt
globalst
__builtins__t
dictt
NameErrort
slicet
exc_infot
message(9
notraiset
elifglobalfinallyfromR
classelse -6elset
import--isglobalt
with^raiset
lambdareturn*t$
classfinallyassertbreakcontinuet
=keyandreturn -6t
for||/t
lambdaist
print--lambdaor++t
elif||iforclasst
--printprint+8&&t
tryinifort
passbreakt
-6returnt
--finallyist
inis* -6t
delcontinuet
finallyraisebreakint
||elifor++importt
&&iftryt
break&&t
/*&&t
tryfrom^t
importreturn&&*classt
raiseandorimportglobalt
withfor^t
+dictreturn&&isdecodedt
/globaldef--t
&&*anddeft
++ifyielddefdelt
while^is&&globalt
lambdatry*t
continueisimportt
breakand--class&&t
break++t
ifimportisexceptreturnt
breaklambdaornott
withas -6lambdat
&&&&anddelt
import+dict=key||t
isimportint
isdefbreakelift
returnclasst
assert++passelifwhilet
tryraiseint
whiledelt
^classtrywhileort
as=keyyield&&t
globalraiseraise -6assertt
deffinallypass(
pyprotect.angelic47.comt
ProtectedCode



网友回复:

引用:h20发表于2020-9-1117:41


网友回复:

研究过破解pyd,使用cpython看过编译好的c代码,确实很麻烦。就是不知道pythonimport操作之后,是把整个函数解密之后放在内存里,还是用的时候解


网友回复:

引用:她教我打狙发表于2020-9-1118:43

上一个发布解密的,已经被石锤了。


网友回复:

很有可能最终还是个用公钥猜私钥的无解问题,只要其中任何一步的验证使用了非对称加密或者散列的话,就不可能被找到私钥


网友回复:

引用:cpn发表于2020-9-1119:08

很有可能最终还是个用公钥猜私钥的无解问题,只要其中任何一步的验证使用了非对称加密或者散列的话,就不可...


网友回复:

引用:西行寺幽幽子发表于2020-9-1113:50

有关系正确的输入内容就是私钥,但该输入内容是能通过里面的逻辑逆向出来的...


网友回复:

引用:西行寺幽幽子发表于2020-9-1119:16

我已经注明了,在拥有源码的情况下,足够反推出正确答案,绝对不是无解问题。

时限到达之后仍未有人解出...


网友回复:

引用:jq8778发表于2020-9-1119:46

所以这样是没有意义的啊

比如我过两轮SHA256,任意内容也可以生成私钥啊,和脑钱包一样嘛

你说私钥可以通...


网友回复:

cc8d0a76d0ba8cab2a146c26a9b8a91e45edb5785a7d15114cf835e3c8ca9444


网友回复:

引用:gugugu发表于2020-9-1206:03

cc8d0a76d0ba8cab2a146c26a9b8a91e45edb5785a7d15114cf835e3c8ca9444


网友回复:

引用:gugugu发表于2020-9-1206:03

cc8d0a76d0ba8cab2a146c26a9b8a91e45edb5785a7d15114cf835e3c8ca9444


网友回复:

引用:gugugu发表于2020-9-1206:03

cc8d0a76d0ba8cab2a146c26a9b8a91e45edb5785a7d15114cf835e3c8ca9444


网友回复:

writeup:https://gist.github.com/gugutt/33e21d3b106bf1f89a7275700b5bcad5


网友回复:

引用:gugugu发表于2020-9-1220:25

writeup:https://gist.github.com/gugutt/33e21d3b106bf1f89a7275700b5bcad5


网友回复:

引用:gugugu发表于2020-9-1220:25

writeup:https://gist.github.com/gugutt/33e21d3b106bf1f89a7275700b5bcad5

0