just discovered this new-to-me syntax in C: pointer to an array of a fixed size
i had to double-check that it's legal
just discovered this new-to-me syntax in C: pointer to an array of a fixed size
i had to double-check that it's legal
they should just ship malware as llvm ir to save everyone involved some time
turns out that when your shitty antivirus spends 10 hours analyzing yet another chromium embedded framework statically linked into an electron app, it's (sometimes) lifting it back to llvm ir using symbolic execution
machine code lowered and lifted here ˙ ͜ʟ˙
disagree with the premise but the conclusion is spot on
@timonsku niceeee
@DonKBlack that's rude
@kc there's routers still shipping with a 4MB flash
usually it's 1-2MB kernel, the rest squashfs. it takes some effort but i think today's openwrt should still be able to do it
you don't get much more than busybox and like 1-2 big binaries
@dramforever oh, i've used this post when implementing relocations in superlinker
GrapheneOS development and updates have continued and will keep going. We have substantial funds available to hire more people to work on GrapheneOS. We'll need to hire multiple experienced developers to fill their big shoes. They'll hopefully be safe and when they return we'll have a bigger team.
i think the "relr" relocation format was invented to fix exactly this, although then i'm not sure why it's not used here
upsetting discovery: electron apps have 16 megabytes of *relocations alone*
i could fit at least four copies of Linux with a complete userland in that space
the red on the left is relocations.
i implemented a custom concolic execution engine[1] for this crackme, but it didn't work out: at the beginning of it, there is code that checks for an alphabet, smth like:
if x == '(': break
if x in 'a'..'z': break
goto fail
i split the solver state on each branch, which doesn't work out well for me: it means i will do a graph search of like 6**32 branches, which will take very long
state merging is hard
[1]: https://gist.github.com/whitequark/e8c7ffab0208d1b033aae715488881d6
@SDRHoernchen like what?
@dramforever and yes, you can make gdb execute a continue command when it hits a watchpoint
@dramforever i had to write this gdb script (x: pc flag reg mem) and then make my emulator emit the same format of hexdump and diff it to figure out where the fuck it went wrong
after that i considered brute-forcing it using a Kintex UltraScale FPGA that i had around (and i calculated that with the alphabet limited to 0-9 i could do it) but stopped because it felt unlikely that the intended solution to a "medium" crackme with "Level 1" in the title would involve $6000 worth of specialized hardware
this wouldn't have worked anyway because the function implements a bijection, and also because i misunderstood what the alphabet is and it wasn't 0-9
probably the single most "i am about to give up" moment was me concluding that i need to do a first preimage attack on a cryptographic function with nontrivial diffusion properties (flipping one bit anywhere changes basically the entire 16 byte output), i went to study and found out that basically no serious hash function has ever had a practical first preimage attack executed on it
@ed_blackburn heh, you're welcome ^^
if you want a really good crackme try https://crackmes.one/crackme/67f9bdc38f555589f3530a85
cat(girl) shaped object"A cat is valued for companionship and its ability to kill vermin."✧ i have friends, and my purpose is to support them ✧✦ i have enemies, and my purpose is to eliminate them ✦✶ i have a life, and my purpose is to reach heaven by violence ✶✷ nothing else matters ✷#searchable
GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.
All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.