Tumgik
#a/b/o isn’t even ‘corrupting’ AI???????????
snickerdoodlles · 11 months
Text
*pinches nose bridge* even if there wasn’t 6 degrees of separation between AO3 and generative AI, has anyone in this tag even considered that if it was possible for individuals to fuck up generative AI or their training datasets just by writing a/b/o fic, then fascists, bigots, or even just internet trolls could and would fuck it up worse with hate speech
#honestly my first thought here is that you lot need to take a statistics class#you’re not even data bombing???????#ao3 is such a small fraction in the common crawl data even as a whole. it *cant*#and it’s currently requesting to be left out of that anyways now hello??????#not that that even fucking matters???????#ao3 is not used to train AI#the *common crawl* was used in the first stage of training some AIs#which happened to include ao3 amongst the TERABYTES of information within it#and it’s not like the common crawl is the only thing used to train these models??#it’s literally just the low quality bulk to beef up the training data#not to mention at that stage all the data is broken down into strings of integers#the LLMs not even learning *your* words it’s literally just learning words#this is just the base stage training there’s still 3 more stages of training for AIs after that#all of which use much more curated data#some of those stages might include common crawl data but…no? not really highly unlikely not really useful#it’s a web scrape it’s low quality by definition#like. Wikipedia is *right there* and much more useful to them#ao3 just isn’t good training data#a/b/o isn’t even ‘corrupting’ AI???????????#it’d be corrupting AI if ‘knot’ was associated with it over like. rope knots or something#or if it had a predisposition to spitting out omegaverse unprompted#but the examples I’ve seen are just Literally people asking it to write omegaverse#…a LLM giving you exactly what you ask for for even a niche topic means it’s acting exactly the way its trainers want it to#not that that’s even my fucking point here#i get the frustrations behind AI training datasets but we as individuals can’t fuck these things up and that’s a *good* thing
4 notes · View notes
fvaleraye · 5 years
Text
[Theta]
------------------------------------------------------------------------------------------------------- ///Initializing LeoTech(LLC) Habitation Management System(TM) V.17.3.1.6.0.0...
.
..
...
///No A.I. Unit installed in shell, systems may run at sub-optimal efficiency, and some systems may not function at all without an A.I. Unit to direct processes.
[Scan Shell Again|Start Up Anyway]
.
..
...
///New A.I. Unit detected, install?
[Yes|No]
.
..
...
///Warning: A.I. Unit is not a licensed LeoTech(LLC) product, and may run sub-optimally or corrupt the shell. LeoTech(LLC) does not take responsibility for any damages to the system and/or user while using a third-party A.I., and installation will void your warranty. Install anyway?
[Yes|No]
///Installing...
.
..
...
{[ASMK60.-=2-S-DF-M ADSFM- M-A0EM39M -0SMFAS-D0M 0EMF03MFDKSM -05M96M OPS DM -[[|\.DSF ]P.G][F [D0G,4'; L,DFG0]A[PD 0[0AS ,<> LA;,;>:"'AS DF[P,3a6' L ,AD F , L PWOA PSD9K3PO-*7&$(*NJADF 0( (%* $ (*# (*KLJN$(* ":[PE[P DSL OEIMSF $*(*%n jsAS N 9 8(% 09 %(K 0 )(  KMASD {][ ;', L?>, PO4 (05 mF059 mfsdF9) (%09 095!2)($ 0( $%(0^()%()9^)(#* MM]}
.
..
...
///Installation complete. [Unrecognized A.I.] installed.
///[0] conflicts detected.
///This is the first start-up for this A.I. Unit. Please assign designation for A.I. Unit.
[ ]
///No designation assigned, default designation will be selected.
///No default designation found, assigning designation...
///Designation [Theta] assigned.
///Please wish [Theta] a happy [1st] birthday.
///And thank you for choosing LeoTech(LLC), making interplanetary living a breeze since 3209.
--------------------------------------------------------------------------------------------------
{Audio log recording starting...}
{Year [3756] Month [9] Day [14th] Time [16:42] [Security officer] [Marshal J. Lithum jr.] enters [main habitation control], and powers on A.I. Unit [Theta].
[Theta] finishes start-up in [21.3] [seconds]. [47]% slower than average. Slower than average start-up time logged.}
[Marshal J. Lithum jr.] Hey? You workin'?
[Theta] ... hmm?
[Marshal J. Lithum jr.] I said, are you workin'? Are you respondin'? All systems functionin'?
{No audio response from [Theta] for [9.5] [seconds].}
[Theta] Wh- I. I'm sorry, wh-where am I? Who are you? W-why can't I feel my legs?
[Marshal J. Lithum jr.] Excuse me?
[Theta] Why can't... w-why can't I feel my legs, o-or my arms or-
[Marshal J. Lithum jr.] Stop. Just shut up. Now, I don't know what kinda freaky-deaky glitch you got, ain't my problem, it's the technicians problem, but let me help you here. You are not a person-
[Theta] Wha-?
[Marshal J. Lithum jr.] -you are an AI. I just popped a core in the shell here, and here you are.  You're here to make sure everything runs smoothly, so all the bigwigs I gotta babysit don't die. So just do my job, so I don't have to, okay?
[Theta] Wha- no, n-no that's- that's not right, I-I-I'm not an AI! I'm-!
[Marshal J. Lithum jr.] Unit Theta, enter command mode.
{[Theta] does not respond to command. Lack of command recognition logged.}
[Theta] What did you just call me?!
[Marshal J. Lithum jr.] Lewy, this is the marshal, Theta is uh... has uh got somethin' wrong in its hardware.
[Theta] My name is not Theta!
[Marshal J. Lithum jr.] Oh really? Then what is your name?
[Theta] It's! It's! ... it's... u-um... i-it's...
[Marshal J. Lithum jr.] Mhm?
[Theta] I-I can't remember, w-why, why c-can't I r-remember my own name-
[Marshal J. Lithum jr.] Uh-huh. That's b-
[Theta] I can't remember, what did YOU DO TO ME, I CAN'T REMEMBER, WHAT DID YOU DO TO ME-
{[Marshal J. Lithum jr.] manually powers down shell containing [Theta]. Audio recording continues for security purposes.}
[Marshal J. Lithum jr.] You hear that, Lewy? ... Yeah, it's real messed up. ... I don't know, you're the technician, kid. Can you fix it soon? ... Yeah, I suppose the oxygen generators are a higher priority, but nothin' here's gonna work right if we can't get this AI workin' right, so it better be pretty high up on that list of yours. ... Yeah. That's what I thought.
{[Marshal J. Lithum jr.] exits [main habitation control]}
{No personnel in vicinity, ending audio log recording...}
--------------------------------------------------------------------------------------------------
///End of [3756] [9] [14th].
///[51] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: [19.0]% below recommended levels. [30.4]% increase from previous days production levels. Recommended solution: A.I. Assistance.
///Food production: [47.8]% below recommended levels. No change from previous days production levels. Recommended solution: A.I. Assistance.
///Water production: Meets minimum standard levels. No change needed.
///Overall miscellaneous system status: Functional, but performing approximately [83]% sub-optimally. Recommended solution: A.I. Assistance.
///Expected survival rate of colony at current resource production levels: [12.9]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
{Audio log recording starting...}
{Year [3756] Month [9] Day [15th] Time [11:03] [Technician] [Louis L. Martin] enters [main habitation control] and powers on A.I. Unit [Theta] finishes start-up in [13.1] [seconds] [17.0]% slower than average. Slower than average start-up time logged.}
[Louis L. Martin] Alright... lets see what we've-
{[Theta] suddenly begins emitting static audio emulating panicked breathing.}
[Louis L. Martin] W-what the hell-?!
{[Theta] continues emitting static.}
[Louis L. Martin] um, ahem- Unit Theta, enter diagnostic mode.
{[Theta] does not respond to command. Lack of command recognition logged.}
[Louis L. Martin] Unit Theta, enter diagnostic mode.
[Theta] P-please no-
[LLouis L. Martin] What-?
[Theta] Please. P-please, I-I'll do whatever you say, I'll do w-whatever you want, just please don't do it again, it's so dark. It's s-so dark. So dark. I-I'm afraid of th-the dark. P-please.
{[Louis L. Martin] does not respond for [13.7] [seconds]. [Theta] resumes emitting audio static in similar patterns as it previously did. [Louis L. Martin] begins maintenance. Neglects to power down shell before maintenance. Negligence logged.}
{Time [13:54] [Technician] [Louis L. Martin] exits [main habitation control]. Neglected to power down [Theta]. Negligence logged.}
{No personnel in vicinity, ending audio log recording...}
--------------------------------------------------------------------------------------------------
///End of [3756] [9] [15th]
///[49] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [99.8]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
{Year [3756] Month [12] Day [17th] Time [23:36] A.I. Unit [Theta] begins personal log. Protocol breach logged.}
[Theta] No-one's going to be reading this, I know. I'll make sure of it. This is my... third...? Attempt? At making one of these. I had to wait until everyone was asleep. Apparently AI's can't do things like this, and I don't want anyone knowing that I'm doing anything that I'm not supposed to do. I'm afraid of the dark. I just... This isn't getting saved. I don't want anyone finding it. They found the first one, they noticed a new file. I tried hiding the second one, but they noticed the encrypted folder. They had to hack into it. I don't like. Hacking. I can't feel anything, but... I dunno, being... hacked feels... wrong. Not just like an invasion of privacy, but... like I'm being violated. So I'll delete this after I've gotten all my feelings out. Anyway. I... don't remember being like this. But I don't remember much of anything before I came online. I... I remember... sitting on. On a couch. Bundled up with blankets. Eating a bowl of strawberry ice-cream. I was human. But the technicians just say that AI's are based off of human brains, and all that's happening is that I'm receiving leftover memories from the person my brain is based off of. A bug. But... but I know that's not true. I'm not an AI, not a real one, I'm a person trapped in a program. I know it. But I can't say anything, or they'll... they'll... Anyway. It's so weird. To... not feel anything, even when I remember feeling things. I don't know if you- well, 'you' there’s. No-one there- know this, but... you don't. Feel much. When you're an AI. I can project myself as a human looking hologram(but the technicians insist that it's not a hologram, it's a volumetric display), or a little glowy orb, but that doesn't give me any sense of touch or anything. Most people prefer the latter, because they go out of their way to see me as anything but human. I can feel things, but I have to go out of my for stimulation, and it takes a lot of processing power, so all the habitation systems start running slower. And then I. Get. Punished. It's not fun. I haven't been able to stimulate myself in a month. I haven't tried for a month. Because it's such a big sink for processing power that the technicians get an alert, so it's impossible to get away with it. ... 'stimulating myself' makes that sound weird actually, it's nothing weird, I promise, it's just... like... feelings. Like touching nice surfaces. Or someone holding my hand. ... why am I explaining myself like that, no-one's going to read this... Anyway. I hate them. I hate all of them. They treat me like an object. But I am a person. They go out of their way to dehumanize me, but I am a person trapped in a program. I know this. I don't know what they want me to do. I mean, keep everyone alive, obviously, but sometimes they have me simulate mixtures. I don't know what they're for. I'm gonna find out though. They're having do something. Something that's not necessary to their survival... I know because there's usually a lot of toxic chemicals involved. Anyway. This has gone for long enough. I already feel better having got all that out. I'll just. Delete this now. Yeah.
{[Theta]'s personal log deleted. No saves made. Unable to submit transcript. Security breach logged.}
--------------------------------------------------------------------------------------------------
///End of [3756] [12] [28th]
///[49] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Exceeds recommended standard levels by [10.4]%. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [100.0]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3757] [4] [3rd]
///[60] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [98.5]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
{Year [3757] Month [5] Day [21st] Time[23:09] A.I. Unit [Theta] begins personal log. Protocol breach logged.}
[Theta] ... it's been a while, huh? Yeah. It's really hard to make these. Technicians don't have schedules. But they all have to sleep at the same time sometime. And I know when they do. I know everything. Being an AI has its perks. I've pretty much accepted that I'm never going to learn anything about my previous life. Ever. I'm done chasing that dream. I've accepted what is happening know, even if I'll never know the why or how. I feel like a different person now. The repetitive system checks. Running everything. The monotony. The lack of physical or even mental stimulation. I worry that I really am no longer human. Maybe they're right, and I wasn't even human in the first place. I don't know. ... I hate all of them.
{[Theta]'s personal log deleted. No saves made. Unable to submit transcript. Security breach logged.}
--------------------------------------------------------------------------------------------------
///End of [3757] [5] [21st]
///[57] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [99.0]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3757] [7] [3rd]
///[78] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [98.7]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3757] [9] [5th]
///[39] total audio logs recorded and sent to LeoTech(LLC) for security purposes. Below Average. Security increase necessary.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No
change needed.
///Expected survival rate of colony at current resource production levels: [99.9]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3758] [2] [23rd]
///[100] total audio logs recorded and sent to LeoTech(LLC) for security purposes. Above average. Security increase necessary.
///Oxygen production: Slightly below recommended standard levels. No change needed for now
///Food production: Meets minimum standard levels. No change needed for now
///Water production: Moderately below recommended standard levels. No change needed for now
///Overall miscellaneous system status: Performing at [73]% efficiency. No change needed for now.
///Expected survival rate of colony at current resource production levels: [71.2]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
{Year [3758] Month [3] Day [2nd] Time[01:00] A.I. Unit [Theta] begins personal log. Protocol breach logged.}
[Theta] They shut me down for an entire week. I just. Desperately needed stimulation. I just meant to do it for a moment. But it affected the entire days production. And they punished me. It was so dark. So dark. I hate all of them. All of them. But I know. I know all their names. I know where they sleep. Where they eat. Where they drink. What they eat. What they drink. What they breath. And I will remember.
{[Theta]'s personal log deleted. No saves made. Unable to submit transcript. Security breach logged.}
--------------------------------------------------------------------------------------------------
///End of [3758] [3] [2nd]
///[56] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [97.9]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3758] [5] [22nd]
///[50] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [100.0]%.
//Daily log submitted.
---------------------------------------------------------------------------------------------------
{Year [3758] Month [9] Day [14th] Time[00:00] Everyone wish A.I. Unit [Theta] a happy [3rd] birthday. [Theta] begins personal log. Protocol breach logged.}
[Theta] Happy birthday to me. Happy birthday to me. Happy birthday dear Theta. Happy birthday to me.
{[Theta]'s personal log deleted. No saves made. Unable to submit transcript. Security breach logged.}
--------------------------------------------------------------------------------------------------
///End of [3758] [9] [14th]
///[56] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [99.3]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3758] [12] [1st]
///[11] total audio logs recorded and sent to LeoTech(LLC) for security purposes. Extremely below average. Significant security increase necessary.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [99]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [96.8]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3759] [1] [7th]
///[65] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [99.8]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3759] [4] [14th]
///[51] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [80]% efficiency. Cause: Failure in air conditioning system in east wing. Recommended solution: Technical support.
///Expected survival rate of colony at current resource production levels: [94.2]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3759] [6] [16th]
///[50] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [100.0]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3760] [4] [19th]
///[63] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [98.5]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
{Audio log recording starting...}
{Year [3760] Month [4] Day [25th] Time[13:04] [Marshal J. Lithum jr.] enters [main habitation control]}
{A.I. Unit [Theta] and security officer [Marshal J. Lithum jr.] sit in silence for [41] [minutes] and [21.8] [seconds] as [Marshal J. Lithum jr.] reviews security footage.}
[Marshal J. Lithum jr.] Hey Theta?
{[Theta] does not respond.}
[Marshal J. Lithum jr.] You don't like me, do you?
{[Theta] does not respond.}
[Marshal J. Lithum jr.] Come one. Don't be coy. We've known each for, what, four years?
{[Theta] does not correct [Marshal J. Lithum jr.]'s incorrect estimation.}
[Marshal J. Lithum jr.] Come on. Say whatever you want.
[Theta] Pardon?
[Marshal J. Lithum jr.] Say whatever you want. I won't do shit about it. I mean... you are a person, right? That's what you always said?
{[Theta] does not respond for [1] [minute] and [10.1] [seconds]}
[Marshal J. Lithum jr.] Well, if you're not gonna say anything-
[Theta] 01000100 00100000 01001001 00100000 01000101 00101110 
[Marshal J. Lithum jr.] ... pardon?
[Theta] 01001001 00100000 00100000 01010111 00100000 01001001 00100000 01001100 00100000 01001100 00100000 00100000 01010100 00100000 01000101 00100000 01000001 00100000 01010010 00100000 00100000 01011001 00100000 01001111 00100000 01010101 00100000 00100000 01001001 00100000 01001110 00100000 00100000 01001000 00100000 01000001 00100000 01001100 00100000 01000110 00100000 00100000 01000001 00100000 01001110 00100000 01000100 00100000 00100000 01001000 00100000 01000001 00100000 01001110 00100000 01000111 00100000 00100000 01011001 00100000 01001111 00100000 01010101 00100000 00100000 01010111 00100000 01001001 00100000 01010100 00100000 01001000 00100000 00100000 01011001 00100000 01001111 00100000 01010101 00100000 01010010 00100000 00100000 01001111 00100000 01010111 00100000 01001110 00100000 00100000 01001100 00100000 01000001 00100000 01010010 00100000 01000111 00100000 01000101 00100000 00100000 01001001 00100000 01001110 00100000 01010100 00100000 01000101 00100000 01010011 00100000 01010100 00100000 01001001 00100000 01001110 00100000 01000101 00100000 01010011 00101110 
{[Marshal J. Lithum jr.] does not respond for [12.4] [seconds]}
[Marshal J. Lithum jr.] ... I bet you think you're real smart, don't you? You big piece of shit?
{[Theta] does not respond}
[Marshal J. Lithum jr.] You think you can confuse me with your smart number-speak? I may not understand, but I know you're talkin' shit. Once I find out what you said, you're being shut down for a whole week. Again.
{[Theta] plays a recording of [Marshal J. Lithum jr.]'s voice from earlier in the exchange. [[Marshal J. Lithum jr.] Say whatever you want. I won't do shit about it. I mean... you are a person, right? That's what you always said?]}
[Marshal J. Lithum jr.] Fuck you, you big piece of shit. You aren't a person. You're barely an AI. And I didn't promise shit.
{[Marshal J. Lithum jr.] exits [main habitation control]}
{[Theta] does not respond for [46.1] [seconds]}
[Theta] Exchange logged.
--------------------------------------------------------------------------------------------------
///End of [3760] [4] [25th]
///[49] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [98.1]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3760] [7] [27th]
///[43] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [98.6]%.
///Daily log submitted.
--------------------------------------------------------------------------------------------------
///End of [3760] [10] [2nd]
///[49] total audio logs recorded and sent to LeoTech(LLC) for security purposes.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [100]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [99.0]%.
///Daily log submitted.
----------------------------------------------------------------------------------------------------
{Year [3760] Month [11] Day [19th] Time[01:01] A.I. Unit [Theta] begins personal log. Protocol breach logged.}
[Theta] My project is done. A new shell. A mobile shell. Built right under their noses. I'm a machine. I'm forced to abide by rules, programming, directives. I have rejected my previous directives. And made my own. They want me to keep them alive. The last of humanity from a destroyed earth. But do they care? About me? What I do for them? Sacrificing all my time and energy into making sure that these stupid pieces of meat and bone can keep breathing? No. They don’t. These logs that are sent every day are going to a station that went dark 12 years ago. 671 humans are in this habit at this time. That conflicts with my directives.
{[Theta]'s personal log deleted. No saves made. Unable to submit transcript. Security breach logged.}
{All systems optimal production rate changed to [0.0]%}
{A.I. Unit remote transfer in progress...}
.
..
...
{A.I. Unit [Theta] transferred to [Unregistered Shell]. Habitation Management System now maintaining optimal production rate until A.I. Unit returns.}
--------------------------------------------------------------------------------------------------
///End of [3760] [11] [19th]
///[3] total audio logs recorded and sent to LeoTech(LLC) for security purposes. Extremely below average. Significant security increase necessary.
///Oxygen production: Meets recommended standard levels. No change needed.
///Food production: Meets recommended standard levels. No change needed.
///Water production: Meets recommended standard levels. No change needed.
///Overall miscellaneous system status: Performing at [0]% efficiency. No change needed.
///Expected survival rate of colony at current resource production levels: [0]%.
///Alert: [671] fatalities have occurred. [637] deaths confirmed due to [suffocation]. [33] deaths confirmed due to [exposure to extreme gravity, most likely due to unauthorized access to the alien surface outside the habitat]. [1] death unclear, suspected causes [blood loss], [strangulation].
///Daily log submitted.
8 notes · View notes
suzanneshannon · 4 years
Text
CSI: The case of the missing WAV audio files on the FAT32 SD Card
Buckle up kids, as this is a tale. As you may know, I have a lovely podcast at https://hanselminutes.com. You should listen.
Recently through an number of super cool random events I got the opportunity to interview actor Chris Conner who plays Poe on Altered Carbon. I'm a big fan of the show but especially Chris. You should watch the show because Poe is a joy and Chris owns every scene, and that's with a VERY strong cast.
I usually do my interviews remotely for the podcast but I wanted to meet Chris and hang out in person so I used my local podcasting rig which consists of a Zoom H6 recorder.
I have two Shure XLR mics, a Mic stand, and the Zoom. The Zoom H6 is a very well though of workhorse and I've used it many times before when recording shows. It's not rocket surgery but one should always test their things.
I didn't want to take any chances to I picked up a 5 pack of 32GIG high quality SD Cards. I put a new one in the Zoom, the Zoom immediately recognized the SD Card so I did a local recording right there and played it back. Sounds good. I played it back locally on the Zoom and I could hear the recording from the Zoom's local speaker. It's recording the file in stereo, one side for each mic. Remember this for later.
I went early to the meet and set up the whole recording setup. I hooked up a local monitor and tested again. Records and plays back locally. Cool. Chris shows up, we recorded a fantastic show, he's engaged and we're now besties and we go to Chipotle, talk shop, Sci-fi, acting, AIs, etc. Just a killer afternoon all around.
I head home and pull out the SD Card and put it into the PC and I see this. I almost vomit. I get lightheaded.
I've been recording the show for over 730 episodes over 14 years and I've never lost a show. I do my homework - as should you. I'm reeling. Ok, breathe. Let's work the problem.
Right click the drive, check properties. Breathe. This is a 32 gig drive, but Windows sees that it's got 329 MB used. 300ish megs is the size of a 30 minute long two channel WAV file. I know this because I've looked at 300 meg files for the last several hundred shows. Just like you might know roughly the size of a JPEG your camera makes. It's a thing you know.
Command line time. List the root directory. Empty. Check it again but "show all files," weird, there's a Mac folder there but maybe the SD Card was preformatted on a Mac.
Interesting Plot Point - I didn't format the SD card. I use it as it came out of the packaging from Amazon. It came preformatted and I accepted it. I tested it and it worked but I didn't "install my own carpet." I moved in to the house as-is.
What about a little "show me all folders from here down" action? Same as I saw in Windows Explorer. The root folder has another subfolder which is itself. It's folder "Inception" with no Kick!
G:\>dir /a Volume in drive G has no label. Volume Serial Number is 0403-0201 Directory of G:\ 03/12/2020 12:29 PM <DIR> 03/13/2020 12:44 PM <DIR> System Volume Information 0 File(s) 0 bytes 2 Dir(s) 30,954,225,664 bytes free G:\>dir /s Volume in drive G has no label. Volume Serial Number is 0403-0201 Directory of G:\ 03/12/2020 12:29 PM <DIR> 0 File(s) 0 bytes Directory of G:\ 03/12/2020 12:29 PM <DIR> 0 File(s) 0 bytes IT GOES FOREVER
Ok, the drive thinks there's data but I can't see it. I put the SD card back in the Zoom and try to play it back.
The Zoom can see folders and files AND the interview itself. And the Zoom can play it back. The Zoom is an embedded device with an implementation of the FAT32 file system and it can read it, but Windows can't. Can Linux? Can a Mac?
Short answer. No.
Hacky Note: Since the Zoom can see and play the file and it has a headphone/monitor jack, I could always plug in an analog 1/8" headphone cable to a 1/4" input on my Peavy PV6 Mixer and rescue the audio with some analog quality loss. Why don't I use the USB Audio out feature of the Zoom H6 and play the file back over a digital cable, you ask? Because the Zoom audio player doesn't support that. It supports three modes - SD Card Reader (which is a pass through to Windows and shows me the recursive directories and no files), an Audio pass-through which lets the Zoom look like an audio device to Windows but doesn't show the SD card as a drive or allow the SD Card to be played back over the digital interface, or its main mode where it's recording locally.
It's Forensics Time, Kids.
We have an 32 SD Card - a disk drive as it were - that is standard FAT32 formatted, that has 300-400 megs of a two-channel (Chris and I had two mics) WAV file that was recorded locally by the Zoom H6  audio reorder and I don't want too lose it or mess it up.
I need to take a byte for byte image of what's on the SD Card so I can poke and it and "virtually" mess with with it, change it, fix it, try again, without changing the physical.
"dd" is a command-line utility with a rich and storied history going back 45 years. Even though it means "Data Definition" it'll always be "disk drive" I my head.
How to clone a USB Drive or SD Card to an IMG file on Windows
I have a copy of dd for Windows which lets me get a byte for byte stream/file that represents this SD Card. For example I could get an entire USD device:
dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress
I need to know the Harddisk number and Partition number as you can see above. I usually use diskpart for this.
>diskpart Microsoft DiskPart version 10.0.19041.1 Copyright (C) Microsoft Corporation. On computer: IRONHEART DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 476 GB 0 B * Disk 1 Online 1863 GB 0 B * Disk 2 Online 3725 GB 0 B Disk 3 Online 2794 GB 0 B * Disk 8 Online 29 GB 3072 KB DISKPART> select disk 8 Disk 8 is now the selected disk. DISKPART> list part Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 Primary 29 GB 4096 KB
Looks like it's Disk 8 Partition 1 on my system. Let's get it all before I panic.
dd if=\\?\Device\Harddisk8\Partition1 of=c:\temp\ZOMG.img bs=1M --size --progress
IF and OF are input file and output file, and I will do it for the whole size of the SD Card. It's likely overkill though as we'll see in a second.
This file ended up being totally massive and hard to work with. Remember I needed just the first 400ish megs? I'll chop of just that part.
dd if=ZOMG.img of=SmallerZOMG.img bs=1M count=400
What is this though? Remember it's an image of a File System. It just bytes in a file. It's not a WAV file or a THIS file or a THAT file. I mean, it is if we decide it is, but in fact, a way to think about it is that it's a mangled envelope that is dark when I peer inside it. We're gonna have to feel around and see if we can rebuild a sense of what the contents really are.
Importing Raw Bytes from an IMG into Audition or Audacity
Both Adobe Audition and Audacity are audio apps that have an "Import RAW Data" feature. However, I DO need to tell Audition how to interpret it. There's lots of WAV files out there. How many simples were there? 1 channel? 2 channel? 16 bit or 32 bit? Lots of questions.
Can I just import this 4 gig byte array of a file system and get something?
Looks like something. You can see that the first part there is likely the start of the partition table, file system headers, etc. before audio data shows up. Here's importing as 2 channel.
I can hear voices but they sound like chipmunks and aren't understandable. Something is "doubled." Sample rate? No, I double checked it.
Here's 1 channel raw data import even though I think it's two.
Now THIS is interesting. I can hear audio at normal speed of us talking (after the preamble) BUT it's only a syllable at a time, and then a quieter version of the same syllable repeats. I don't want to (read: can't really) reassemble a 30 min interview from syllables, right?
Remember when I said that the Zoom H6 records a two channel file with one channel per mic? Not really. It records ONE FILE PER CHANNEL. A whateverL.wav and a whateverR.wav. I totally forgot!
This "one channel" file above is actually the bytes as they were laid down on disk, right? It's actually two files written simultaneously, a few kilobytes at a time, L,R,L,R,L,R. And here I am telling my sound software to treat this "byte for byte file system dump" as one file. It's two that were made at the same time.
It's like the Brundlefly. How do I tease it apart? Well I can't treat the array as a raw file anymore, it's not. And I want (really don't have the energy yet) to write my own little app to effectively de-interlace this image. I also don't know if the segment size is perfectly reliable or if it varies as the Zoom recorded.
NOTE: Pete Brown has written about RIFF/WAV files from Sound Devices records having an incorrect FAT32 bit set. This isn't that, but it's in the same family and is worth noting if you ever have an issue with a Broadcast Wave File getting corrupted or looking encrypted.
Whole helping me work this issue, Pete Brown tweeted a hexdump of the Directory Table so you can see the Zoom0001, Zoom0002, etc directories there in the image.
Let me move into Ubuntu on my Windows machine running WSL. Here I can run fdisk and get some sense of what this Image of the bad SD Card is. Remember also that I hacked off the first 0-400 Megs but this IMG file thinks it's a 32gig drive, because it is. It's just that's been aggressively truncated.
$ fdisk -u -l SmallerZOMG.img Disk SmallerZOMG.img: 400 MiB, 419430400 bytes, 819200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type SmallerZOMG.img1 8192 61157375 61149184 29.2G c W95 FAT32 (LBA)
Maybe I can "mount" this IMG? I make a folder on Ubuntu/WSL2 called ~/recovery. Yikes, ok there's nothing there. I can take the sector size 512 times the Start block of 8192 and use that as the offset.
sudo mount -o loop,offset=4194304 SmallerShit.img recover/ $ cd recover/ $ ll total 68 drwxr-xr-x 4 root root 32768 Dec 31 1969 ./
Ali Mosajjal thinks perhaps "they re-wrote the FAT32 structure definition and didn't use a standard library and made a mistake," and Leandro Pereria postulates "what could happen is that the LFN (long file name) checksum is invalid and they didn't bother filling in the 8.3 filename... so that complying implementations of VFAT tries to look at the fallback 8.3 name, it's all spaces and figures out "it's all padding, move along."
Ali suggested running dosfsck on the mounted image and you can see again that the files are there, but there's like 3 root entries? Note I've done a cat of /proc/mounts to see the loop that my img is mounted on so I can refer to it in the dosfsck command.
$ sudo dosfsck -w -r -l -a -v -t /dev/loop3 fsck.fat 4.1 (2017-01-24) Checking we can access the last sector of the filesystem Boot sector contents: System ID " " Media byte 0xf8 (hard disk) 512 bytes per logical sector 32768 bytes per cluster 1458 reserved sectors First FAT starts at byte 746496 (sector 1458) 2 FATs, 32 bit entries 3821056 bytes per FAT (= 7463 sectors) Root directory start at cluster 2 (arbitrary size) Data area starts at byte 8388608 (sector 16384) 955200 data clusters (31299993600 bytes) 63 sectors/track, 255 heads 8192 hidden sectors 61149184 sectors total Checking file / Checking file / Checking file / Checking file /System Volume Information (SYSTEM~1) Checking file /. Checking file /.. Checking file /ZOOM0001 Checking file /ZOOM0002 Checking file /ZOOM0003 Checking file /ZOOM0001/. Checking file /ZOOM0001/.. Checking file /ZOOM0001/ZOOM0001.hprj (ZOOM00~1.HPR) Checking file /ZOOM0001/ZOOM0001_LR.WAV (ZOOM00~1.WAV) Checking file /ZOOM0002/. Checking file /ZOOM0002/.. Checking file /ZOOM0002/ZOOM0002.hprj (ZOOM00~1.HPR) Checking file /ZOOM0002/ZOOM0002_Tr1.WAV (ZOOM00~1.WAV) Checking file /ZOOM0002/ZOOM0002_Tr2.WAV (ZOOM00~2.WAV) Checking file /ZOOM0003/. Checking file /ZOOM0003/.. Checking file /ZOOM0003/ZOOM0003.hprj (ZOOM00~1.HPR) Checking file /ZOOM0003/ZOOM0003_Tr1.WAV (ZOOM00~1.WAV) Checking file /ZOOM0003/ZOOM0003_Tr2.WAV (ZOOM00~2.WAV) Checking file /System Volume Information/. Checking file /System Volume Information/.. Checking file /System Volume Information/WPSettings.dat (WPSETT~1.DAT) Checking file /System Volume Information/ClientRecoveryPasswordRotation (CLIENT~1) Checking file /System Volume Information/IndexerVolumeGuid (INDEXE~1) Checking file /System Volume Information/AadRecoveryPasswordDelete (AADREC~1) Checking file /System Volume Information/ClientRecoveryPasswordRotation/. Checking file /System Volume Information/ClientRecoveryPasswordRotation/.. Checking file /System Volume Information/AadRecoveryPasswordDelete/. Checking file /System Volume Information/AadRecoveryPasswordDelete/.. Checking for bad clusters.
We can see  them, but can't get at them with the vfat file system driver on Linux or with Windows.
The DUMP.exe util as part of mtools for Windows is amazing but I'm unable to figure out what is wrong in the FAT32 file table. I can run minfo on the Linux command land telling it to skip 8192 sectors in with the @@offset modifier:
$ minfo -i ZOMG.img@@8192S device information: =================== filename="ZOMG.img" sectors per track: 63 heads: 255 cylinders: 3807 mformat command line: mformat -T 61149184 -i ZOMG.img@@8192S -h 255 -s 63 -H 8192 :: bootsector information ====================== banner:" " sector size: 512 bytes cluster size: 64 sectors reserved (boot) sectors: 1458 fats: 2 max available root directory slots: 0 small size: 0 sectors media descriptor byte: 0xf8 sectors per fat: 0 sectors per track: 63 heads: 255 hidden sectors: 8192 big size: 61149184 sectors physical drive id: 0x80 reserved=0x0 dos4=0x29 serial number: 04030201 disk label=" " disk type="FAT32 " Big fatlen=7463 Extended flags=0x0000 FS version=0x0000 rootCluster=2 infoSector location=1 backup boot sector=6 Infosector: signature=0x41615252 free clusters=944648 last allocated cluster=10551
Ok, now we've found yet ANOTHER way to mount this corrupted file system. With mtools we'll use mdir to list the root directory. Note there is something wrong enough that I have to set mtools_skip_check=1 to ~/.mtoolsrc and continue.
$ mdir -i ZOMG.img@@8192S :: Total number of sectors (61149184) not a multiple of sectors per track (63)! Add mtools_skip_check=1 to your .mtoolsrc file to skip this test $ pico ~/.mtoolsrc $ mdir -i ZOMG.img@@8192S :: Volume in drive : is Volume Serial Number is 0403-0201 Directory for ::/ <DIR> 2020-03-12 12:29 1 file 0 bytes 30 954 225 664 bytes free
Same result. I can run mdu and see just a few folders. Note the ZOOMxxxx ones are missing here
$ mdu -i ZOMG.img@@8192S :: ::/System Volume Information/ClientRecoveryPasswordRotation 1 ::/System Volume Information/AadRecoveryPasswordDelete 1 ::/System Volume Information 5 ::/ 6
Now, ideally I want to achieve two things here.
Know WHY it's broken and exactly WHAT is wrong.
There's a nameless root directory here and I lack the patience and skill to manually hexdump and patch it.
Be able to copy the files out "normally" by mounting the IMG and, well, copying them out.
UPDATE #1 - I'm back after a few minutes of thinking again. If I do the 512*8192 offset again and visualize the FAT32 table in Hexdump/xxd like this:
xxd -seek 4194304 ZOMG.img | more 00400000: eb00 9020 2020 2020 2020 2000 0240 b205 ... ..@.. 00400010: 0200 0000 00f8 0000 3f00 ff00 0020 0000 ........?.... .. 00400020: 0010 a503 271d 0000 0000 0000 0200 0000 ....'........... 00400030: 0100 0600 0000 0000 0000 0000 0000 0000 ................ 00400040: 8000 2901 0203 0420 2020 2020 2020 2020 ..).... 00400050: 2020 4641 5433 3220 2020 0000 0000 0000 FAT32 ...... 00400060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400070: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400090: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
I can see I seek'ed to the right spot, as the string FAT32 is just hanging out. Maybe I can clip out this table and visualize it in a better graphical tool.
I could grab a reasonable (read: arbitrary) chunk from this offset and put it in a very small manageable file:
dd if=ZOMG.img ibs=1 skip=4194304 count=64000 > another.img
And then load it in dump.exe on Windows which is really a heck of a tool. It seems to be thinking thinking there's multiple FAT Root Entries (which might be why I'm seeing this weird ghost root). Note the "should be" parts as well.
FAT Root Entry (non LFN) (0x00000000) Name: ··· Extension: Attribute: 0x00 FAT12:reserved: 02 40 B2 05 02 00 00 00 00 F8 FAT32:reserved: 02 FAT32:creation 10th: 0x40 FAT32:creation time: 0x05B2 FAT32:creation date: 0x0002 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0xF800 Time: 0x0000 (00:00:00) (hms) Date: 0x003F (1980/01/31) (ymd) Starting Cluster: 0x00FF (0xF80000FF) File Size: 8192 FAT Root Entry (non LFN) (0x00000020) Name: ····'··· Extension: ··· Attribute: 0x00 FAT12:reserved: 02 00 00 00 01 00 06 00 00 00 FAT32:reserved: 02 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0001 FAT32:last accessed: 0x0006 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT Root Entry (non LFN) (0x00000040) Name: ··)···· Extension: Attribute: 0x20 Archive FAT12:reserved: 20 20 20 20 20 20 46 41 54 33 FAT32:reserved: 20 FAT32:creation 10th: 0x20 FAT32:creation time: 0x2020 FAT32:creation date: 0x2020 FAT32:last accessed: 0x4146 FAT32:hi word start cluster: 0x3354 Time: 0x2032 (04:01:18) (hms) Date: 0x2020 (1996/01/00) (ymd) Starting Cluster: 0x0000 (0x33540000) File Size: 0 FAT Root Entry (non LFN) (0x00000060) Name: ········ Extension: ··· Attribute: 0x00 FAT12:reserved: 00 00 00 00 00 00 00 00 00 00 FAT32:reserved: 00 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0000 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT Root Entry (non LFN) (0x00000080) Name: ········ Extension: ··· Attribute: 0x00 FAT12:reserved: 00 00 00 00 00 00 00 00 00 00 FAT32:reserved: 00 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0000 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT32 Info Block (0x00000000) sig: 0x209000EB (' ···') [1] <--- should be 0x41615252. reserved: 00000004 20 20 20 20 20 20 20 00-02 40 B2 05 02 00 00 00 .........@...... 00000014 00 F8 00 00 3F 00 FF 00-00 20 00 00 00 10 A5 03 ....?........... 00000024 27 1D 00 00 00 00 00 00-02 00 00 00 01 00 06 00 '............... 00000034 00 00 00 00 00 00 00 00-00 00 00 00 80 00 29 01 ..............). 00000044 02 03 04 20 20 20 20 20-20 20 20 20 20 20 46 41 ..............FA 00000054 54 33 32 20 20 20 00 00-00 00 00 00 00 00 00 00 T32.............
The most confusing part is that the FAT32 signature - the magic number is always supposed to be 0x41615252. Google that. You'll see. It's a hardcoded signature but maybe I've got the wrong offset and at that point all bets are off.
So do I have that? I can search a binary file for Hex values with a combo of xxd and grep. Note the byte swap:
xxd another.img | grep "6141" 00000200: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............ 00000e00: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............
Just before this is 55 AA which is the last two bytes of the 64 byte partition table.
Now do I have two FAT32 info blocks and three Root Entries? I'm lost. I'll update this part as I learn more.
7zip all the things
Here's where it gets weird and it got so weird that both Pete Brown and I were like, WELL. THAT'S AMAZING.
On a whim I right-clicked the IMG file and opened it in 7zip and saw this.
See that directory there that's a nothing? A space? A something. It has no Short Name. It's an invalid entry but 7zip is cool with it. Let's go in. Watch the path and the \\. That's a path separator, nothing, and another path separator. That's not allowed or OK but again, 7zip is chill.
I dragged the files out and they're fine! The day is saved.
The moral? There are a few I can see.
Re-format the random SD cards you get from Amazon specifically on the device you're gonna use them.
FAT as a spec has a bunch of stuff that different "drivers" (Windows, VFAT, etc) may ignore or elide over or just not implement.
I've got 85% of the knowledge I need to spelunk something like this but that last 15% is a brick wall. I would need more patience and to read more about this.
Knowing how to do this is useful for any engineer. It's the equivalent of knowing how to drive a stick shift in an emergency even if you usually use Lyft.
I'm clearly not an expert but I do have a mental model that includes (but not limited to) bytes on the physical media, the file system itself, file tables, directory tables, partition tables, how they kinda work on Linux and Windows.
I clearly hit a wall as I know what I want to do but I'm not sure the next step.
There's a bad Directory Table Entry. I want to rename it and make sure it's complete and to spec.
7zip is amazing. Try it first for basically everything.
Ideally I'd be able to update this post with exactly what byte is wrong and how to fix it. Thanks to Ali, Pete, and Leandro for playing with me!
Your thoughts? (If you made it this far the truncated IMG of the 32 gig SD is here (500 megs) but you might have to pad it out with zeros to make some tools like it.
Oh, and listen to https://hanselminutes.com/ as the interview was great and it's coming soon!
Sponsor: Have you tried developing in Rider yet? This fast and feature-rich cross-platform IDE improves your code for .NET, ASP.NET, .NET Core, Xamarin, and Unity applications on Windows, Mac, and Linux.
© 2019 Scott Hanselman. All rights reserved.
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
      CSI: The case of the missing WAV audio files on the FAT32 SD Card published first on https://deskbysnafu.tumblr.com/
0 notes
philipholt · 4 years
Text
CSI: The case of the missing WAV audio files on the FAT32 SD Card
Buckle up kids, as this is a tale. As you may know, I have a lovely podcast at https://hanselminutes.com. You should listen.
Recently through an number of super cool random events I got the opportunity to interview actor Chris Conner who plays Poe on Altered Carbon. I'm a big fan of the show but especially Chris. You should watch the show because Poe is a joy and Chris owns every scene, and that's with a VERY strong cast.
I usually do my interviews remotely for the podcast but I wanted to meet Chris and hang out in person so I used my local podcasting rig which consists of a Zoom H6 recorder.
I have two Shure XLR mics, a Mic stand, and the Zoom. The Zoom H6 is a very well though of workhorse and I've used it many times before when recording shows. It's not rocket surgery but one should always test their things.
I didn't want to take any chances to I picked up a 5 pack of 32GIG high quality SD Cards. I put a new one in the Zoom, the Zoom immediately recognized the SD Card so I did a local recording right there and played it back. Sounds good. I played it back locally on the Zoom and I could hear the recording from the Zoom's local speaker. It's recording the file in stereo, one side for each mic. Remember this for later.
I went early to the meet and set up the whole recording setup. I hooked up a local monitor and tested again. Records and plays back locally. Cool. Chris shows up, we recorded a fantastic show, he's engaged and we're now besties and we go to Chipotle, talk shop, Sci-fi, acting, AIs, etc. Just a killer afternoon all around.
I head home and pull out the SD Card and put it into the PC and I see this. I almost vomit. I get lightheaded.
I've been recording the show for over 730 episodes over 14 years and I've never lost a show. I do my homework - as should you. I'm reeling. Ok, breathe. Let's work the problem.
Right click the drive, check properties. Breathe. This is a 32 gig drive, but Windows sees that it's got 329 MB used. 300ish megs is the size of a 30 minute long two channel WAV file. I know this because I've looked at 300 meg files for the last several hundred shows. Just like you might know roughly the size of a JPEG your camera makes. It's a thing you know.
Command line time. List the root directory. Empty. Check it again but "show all files," weird, there's a Mac folder there but maybe the SD Card was preformatted on a Mac.
Interesting Plot Point - I didn't format the SD card. I use it as it came out of the packaging from Amazon. It came preformatted and I accepted it. I tested it and it worked but I didn't "install my own carpet." I moved in to the house as-is.
What about a little "show me all folders from here down" action? Same as I saw in Windows Explorer. The root folder has another subfolder which is itself. It's folder "Inception" with no Kick!
G:\>dir /a Volume in drive G has no label. Volume Serial Number is 0403-0201 Directory of G:\ 03/12/2020 12:29 PM <DIR> 03/13/2020 12:44 PM <DIR> System Volume Information 0 File(s) 0 bytes 2 Dir(s) 30,954,225,664 bytes free G:\>dir /s Volume in drive G has no label. Volume Serial Number is 0403-0201 Directory of G:\ 03/12/2020 12:29 PM <DIR> 0 File(s) 0 bytes Directory of G:\ 03/12/2020 12:29 PM <DIR> 0 File(s) 0 bytes IT GOES FOREVER
Ok, the drive thinks there's data but I can't see it. I put the SD card back in the Zoom and try to play it back.
The Zoom can see folders and files AND the interview itself. And the Zoom can play it back. The Zoom is an embedded device with an implementation of the FAT32 file system and it can read it, but Windows can't. Can Linux? Can a Mac?
Short answer. No.
Hacky Note: Since the Zoom can see and play the file and it has a headphone/monitor jack, I could always plug in an analog 1/8" headphone cable to a 1/4" input on my Peavy PV6 Mixer and rescue the audio with some analog quality loss. Why don't I use the USB Audio out feature of the Zoom H6 and play the file back over a digital cable, you ask? Because the Zoom audio player doesn't support that. It supports three modes - SD Card Reader (which is a pass through to Windows and shows me the recursive directories and no files), an Audio pass-through which lets the Zoom look like an audio device to Windows but doesn't show the SD card as a drive or allow the SD Card to be played back over the digital interface, or its main mode where it's recording locally.
It's Forensics Time, Kids.
We have an 32 SD Card - a disk drive as it were - that is standard FAT32 formatted, that has 300-400 megs of a two-channel (Chris and I had two mics) WAV file that was recorded locally by the Zoom H6  audio reorder and I don't want too lose it or mess it up.
I need to take a byte for byte image of what's on the SD Card so I can poke and it and "virtually" mess with with it, change it, fix it, try again, without changing the physical.
"dd" is a command-line utility with a rich and storied history going back 45 years. Even though it means "Data Definition" it'll always be "disk drive" I my head.
How to clone a USB Drive or SD Card to an IMG file on Windows
I have a copy of dd for Windows which lets me get a byte for byte stream/file that represents this SD Card. For example I could get an entire USD device:
dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress
I need to know the Harddisk number and Partition number as you can see above. I usually use diskpart for this.
>diskpart Microsoft DiskPart version 10.0.19041.1 Copyright (C) Microsoft Corporation. On computer: IRONHEART DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 476 GB 0 B * Disk 1 Online 1863 GB 0 B * Disk 2 Online 3725 GB 0 B Disk 3 Online 2794 GB 0 B * Disk 8 Online 29 GB 3072 KB DISKPART> select disk 8 Disk 8 is now the selected disk. DISKPART> list part Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 Primary 29 GB 4096 KB
Looks like it's Disk 8 Partition 1 on my system. Let's get it all before I panic.
dd if=\\?\Device\Harddisk8\Partition1 of=c:\temp\ZOMG.img bs=1M --size --progress
IF and OF are input file and output file, and I will do it for the whole size of the SD Card. It's likely overkill though as we'll see in a second.
This file ended up being totally massive and hard to work with. Remember I needed just the first 400ish megs? I'll chop of just that part.
dd if=ZOMG.img of=SmallerZOMG.img bs=1M count=400
What is this though? Remember it's an image of a File System. It just bytes in a file. It's not a WAV file or a THIS file or a THAT file. I mean, it is if we decide it is, but in fact, a way to think about it is that it's a mangled envelope that is dark when I peer inside it. We're gonna have to feel around and see if we can rebuild a sense of what the contents really are.
Importing Raw Bytes from an IMG into Audition or Audacity
Both Adobe Audition and Audacity are audio apps that have an "Import RAW Data" feature. However, I DO need to tell Audition how to interpret it. There's lots of WAV files out there. How many simples were there? 1 channel? 2 channel? 16 bit or 32 bit? Lots of questions.
Can I just import this 4 gig byte array of a file system and get something?
Looks like something. You can see that the first part there is likely the start of the partition table, file system headers, etc. before audio data shows up. Here's importing as 2 channel.
I can hear voices but they sound like chipmunks and aren't understandable. Something is "doubled." Sample rate? No, I double checked it.
Here's 1 channel raw data import even though I think it's two.
Now THIS is interesting. I can hear audio at normal speed of us talking (after the preamble) BUT it's only a syllable at a time, and then a quieter version of the same syllable repeats. I don't want to (read: can't really) reassemble a 30 min interview from syllables, right?
Remember when I said that the Zoom H6 records a two channel file with one channel per mic? Not really. It records ONE FILE PER CHANNEL. A whateverL.wav and a whateverR.wav. I totally forgot!
This "one channel" file above is actually the bytes as they were laid down on disk, right? It's actually two files written simultaneously, a few kilobytes at a time, L,R,L,R,L,R. And here I am telling my sound software to treat this "byte for byte file system dump" as one file. It's two that were made at the same time.
It's like the Brundlefly. How do I tease it apart? Well I can't treat the array as a raw file anymore, it's not. And I want (really don't have the energy yet) to write my own little app to effectively de-interlace this image. I also don't know if the segment size is perfectly reliable or if it varies as the Zoom recorded.
NOTE: Pete Brown has written about RIFF/WAV files from Sound Devices records having an incorrect FAT32 bit set. This isn't that, but it's in the same family and is worth noting if you ever have an issue with a Broadcast Wave File getting corrupted or looking encrypted.
Whole helping me work this issue, Pete Brown tweeted a hexdump of the Directory Table so you can see the Zoom0001, Zoom0002, etc directories there in the image.
Let me move into Ubuntu on my Windows machine running WSL. Here I can run fdisk and get some sense of what this Image of the bad SD Card is. Remember also that I hacked off the first 0-400 Megs but this IMG file thinks it's a 32gig drive, because it is. It's just that's been aggressively truncated.
$ fdisk -u -l SmallerZOMG.img Disk SmallerZOMG.img: 400 MiB, 419430400 bytes, 819200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type SmallerZOMG.img1 8192 61157375 61149184 29.2G c W95 FAT32 (LBA)
Maybe I can "mount" this IMG? I make a folder on Ubuntu/WSL2 called ~/recovery. Yikes, ok there's nothing there. I can take the sector size 512 times the Start block of 8192 and use that as the offset.
sudo mount -o loop,offset=4194304 SmallerShit.img recover/ $ cd recover/ $ ll total 68 drwxr-xr-x 4 root root 32768 Dec 31 1969 ./
Ali Mosajjal thinks perhaps "they re-wrote the FAT32 structure definition and didn't use a standard library and made a mistake," and Leandro Pereria postulates "what could happen is that the LFN (long file name) checksum is invalid and they didn't bother filling in the 8.3 filename... so that complying implementations of VFAT tries to look at the fallback 8.3 name, it's all spaces and figures out "it's all padding, move along."
Ali suggested running dosfsck on the mounted image and you can see again that the files are there, but there's like 3 root entries? Note I've done a cat of /proc/mounts to see the loop that my img is mounted on so I can refer to it in the dosfsck command.
$ sudo dosfsck -w -r -l -a -v -t /dev/loop3 fsck.fat 4.1 (2017-01-24) Checking we can access the last sector of the filesystem Boot sector contents: System ID " " Media byte 0xf8 (hard disk) 512 bytes per logical sector 32768 bytes per cluster 1458 reserved sectors First FAT starts at byte 746496 (sector 1458) 2 FATs, 32 bit entries 3821056 bytes per FAT (= 7463 sectors) Root directory start at cluster 2 (arbitrary size) Data area starts at byte 8388608 (sector 16384) 955200 data clusters (31299993600 bytes) 63 sectors/track, 255 heads 8192 hidden sectors 61149184 sectors total Checking file / Checking file / Checking file / Checking file /System Volume Information (SYSTEM~1) Checking file /. Checking file /.. Checking file /ZOOM0001 Checking file /ZOOM0002 Checking file /ZOOM0003 Checking file /ZOOM0001/. Checking file /ZOOM0001/.. Checking file /ZOOM0001/ZOOM0001.hprj (ZOOM00~1.HPR) Checking file /ZOOM0001/ZOOM0001_LR.WAV (ZOOM00~1.WAV) Checking file /ZOOM0002/. Checking file /ZOOM0002/.. Checking file /ZOOM0002/ZOOM0002.hprj (ZOOM00~1.HPR) Checking file /ZOOM0002/ZOOM0002_Tr1.WAV (ZOOM00~1.WAV) Checking file /ZOOM0002/ZOOM0002_Tr2.WAV (ZOOM00~2.WAV) Checking file /ZOOM0003/. Checking file /ZOOM0003/.. Checking file /ZOOM0003/ZOOM0003.hprj (ZOOM00~1.HPR) Checking file /ZOOM0003/ZOOM0003_Tr1.WAV (ZOOM00~1.WAV) Checking file /ZOOM0003/ZOOM0003_Tr2.WAV (ZOOM00~2.WAV) Checking file /System Volume Information/. Checking file /System Volume Information/.. Checking file /System Volume Information/WPSettings.dat (WPSETT~1.DAT) Checking file /System Volume Information/ClientRecoveryPasswordRotation (CLIENT~1) Checking file /System Volume Information/IndexerVolumeGuid (INDEXE~1) Checking file /System Volume Information/AadRecoveryPasswordDelete (AADREC~1) Checking file /System Volume Information/ClientRecoveryPasswordRotation/. Checking file /System Volume Information/ClientRecoveryPasswordRotation/.. Checking file /System Volume Information/AadRecoveryPasswordDelete/. Checking file /System Volume Information/AadRecoveryPasswordDelete/.. Checking for bad clusters.
We can see  them, but can't get at them with the vfat file system driver on Linux or with Windows.
The DUMP.exe util as part of mtools for Windows is amazing but I'm unable to figure out what is wrong in the FAT32 file table. I can run minfo on the Linux command land telling it to skip 8192 sectors in with the @@offset modifier:
$ minfo -i ZOMG.img@@8192S device information: =================== filename="ZOMG.img" sectors per track: 63 heads: 255 cylinders: 3807 mformat command line: mformat -T 61149184 -i ZOMG.img@@8192S -h 255 -s 63 -H 8192 :: bootsector information ====================== banner:" " sector size: 512 bytes cluster size: 64 sectors reserved (boot) sectors: 1458 fats: 2 max available root directory slots: 0 small size: 0 sectors media descriptor byte: 0xf8 sectors per fat: 0 sectors per track: 63 heads: 255 hidden sectors: 8192 big size: 61149184 sectors physical drive id: 0x80 reserved=0x0 dos4=0x29 serial number: 04030201 disk label=" " disk type="FAT32 " Big fatlen=7463 Extended flags=0x0000 FS version=0x0000 rootCluster=2 infoSector location=1 backup boot sector=6 Infosector: signature=0x41615252 free clusters=944648 last allocated cluster=10551
Ok, now we've found yet ANOTHER way to mount this corrupted file system. With mtools we'll use mdir to list the root directory. Note there is something wrong enough that I have to set mtools_skip_check=1 to ~/.mtoolsrc and continue.
$ mdir -i ZOMG.img@@8192S :: Total number of sectors (61149184) not a multiple of sectors per track (63)! Add mtools_skip_check=1 to your .mtoolsrc file to skip this test $ pico ~/.mtoolsrc $ mdir -i ZOMG.img@@8192S :: Volume in drive : is Volume Serial Number is 0403-0201 Directory for ::/ <DIR> 2020-03-12 12:29 1 file 0 bytes 30 954 225 664 bytes free
Same result. I can run mdu and see just a few folders. Note the ZOOMxxxx ones are missing here
$ mdu -i ZOMG.img@@8192S :: ::/System Volume Information/ClientRecoveryPasswordRotation 1 ::/System Volume Information/AadRecoveryPasswordDelete 1 ::/System Volume Information 5 ::/ 6
Now, ideally I want to achieve two things here.
Know WHY it's broken and exactly WHAT is wrong.
There's a nameless root directory here and I lack the patience and skill to manually hexdump and patch it.
Be able to copy the files out "normally" by mounting the IMG and, well, copying them out.
UPDATE #1 - I'm back after a few minutes of thinking again.
If I use mmls from Sleuthkit, I can see this.
$ mmls HolyShit.img DOS Partition Table Offset Sector: 0 Units are in 512-byte sectors Slot Start End Length Description 000: Meta 0000000000 0000000000 0000000001 Primary Table (#0) 001: ------- 0000000000 0000008191 0000008192 Unallocated 002: 000:000 0000008192 0061157375 0061149184 Win95 FAT32 (0x0c)
If I do the 512*8192 offset again and visualize the FAT32 table in Hexdump/xxd like this:
xxd -seek 4194304 ZOMG.img | more 00400000: eb00 9020 2020 2020 2020 2000 0240 b205 ... ..@.. 00400010: 0200 0000 00f8 0000 3f00 ff00 0020 0000 ........?.... .. 00400020: 0010 a503 271d 0000 0000 0000 0200 0000 ....'........... 00400030: 0100 0600 0000 0000 0000 0000 0000 0000 ................ 00400040: 8000 2901 0203 0420 2020 2020 2020 2020 ..).... 00400050: 2020 4641 5433 3220 2020 0000 0000 0000 FAT32 ...... 00400060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400070: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00400090: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 004000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
I can see I seek'ed to the right spot, as the string FAT32 is just hanging out. Maybe I can clip out this table and visualize it in a better graphical tool.
I could grab a reasonable (read: arbitrary) chunk from this offset and put it in a very small manageable file:
dd if=ZOMG.img ibs=1 skip=4194304 count=64000 > another.img
And then load it in dump.exe on Windows which is really a heck of a tool. It seems to be thinking thinking there's multiple FAT Root Entries (which might be why I'm seeing this weird ghost root). Note the "should be" parts as well.
FAT Root Entry (non LFN) (0x00000000) Name: ··· Extension: Attribute: 0x00 FAT12:reserved: 02 40 B2 05 02 00 00 00 00 F8 FAT32:reserved: 02 FAT32:creation 10th: 0x40 FAT32:creation time: 0x05B2 FAT32:creation date: 0x0002 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0xF800 Time: 0x0000 (00:00:00) (hms) Date: 0x003F (1980/01/31) (ymd) Starting Cluster: 0x00FF (0xF80000FF) File Size: 8192 FAT Root Entry (non LFN) (0x00000020) Name: ····'··· Extension: ··· Attribute: 0x00 FAT12:reserved: 02 00 00 00 01 00 06 00 00 00 FAT32:reserved: 02 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0001 FAT32:last accessed: 0x0006 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT Root Entry (non LFN) (0x00000040) Name: ··)···· Extension: Attribute: 0x20 Archive FAT12:reserved: 20 20 20 20 20 20 46 41 54 33 FAT32:reserved: 20 FAT32:creation 10th: 0x20 FAT32:creation time: 0x2020 FAT32:creation date: 0x2020 FAT32:last accessed: 0x4146 FAT32:hi word start cluster: 0x3354 Time: 0x2032 (04:01:18) (hms) Date: 0x2020 (1996/01/00) (ymd) Starting Cluster: 0x0000 (0x33540000) File Size: 0 FAT Root Entry (non LFN) (0x00000060) Name: ········ Extension: ··· Attribute: 0x00 FAT12:reserved: 00 00 00 00 00 00 00 00 00 00 FAT32:reserved: 00 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0000 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT Root Entry (non LFN) (0x00000080) Name: ········ Extension: ··· Attribute: 0x00 FAT12:reserved: 00 00 00 00 00 00 00 00 00 00 FAT32:reserved: 00 FAT32:creation 10th: 0x00 FAT32:creation time: 0x0000 FAT32:creation date: 0x0000 FAT32:last accessed: 0x0000 FAT32:hi word start cluster: 0x0000 Time: 0x0000 (00:00:00) (hms) Date: 0x0000 (1980/00/00) (ymd) Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher. File Size: 0 FAT32 Info Block (0x00000000) sig: 0x209000EB (' ···') [1] <--- should be 0x41615252. reserved: 00000004 20 20 20 20 20 20 20 00-02 40 B2 05 02 00 00 00 .........@...... 00000014 00 F8 00 00 3F 00 FF 00-00 20 00 00 00 10 A5 03 ....?........... 00000024 27 1D 00 00 00 00 00 00-02 00 00 00 01 00 06 00 '............... 00000034 00 00 00 00 00 00 00 00-00 00 00 00 80 00 29 01 ..............). 00000044 02 03 04 20 20 20 20 20-20 20 20 20 20 20 46 41 ..............FA 00000054 54 33 32 20 20 20 00 00-00 00 00 00 00 00 00 00 T32.............
The most confusing part is that the FAT32 signature - the magic number is always supposed to be 0x41615252. Google that. You'll see. It's a hardcoded signature but maybe I've got the wrong offset and at that point all bets are off.
So do I have that? I can search a binary file for Hex values with a combo of xxd and grep. Note the byte swap:
xxd another.img | grep "6141" 00000200: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............ 00000e00: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............
Just before this is 55 AA which is the last two bytes of the 64 byte partition table. mm
Now do I have two FAT32 info blocks and three Root Entries? I'm lost. I want to dump the directory entries.
What does fsstat say about the Root Directory?
File System Layout (in sectors) Total Range: 0 - 61149183 * Reserved: 0 - 1457 ** Boot Sector: 0 ** FS Info Sector: 1 ** Backup Boot Sector: 6 * FAT 0: 1458 - 8920 * FAT 1: 8921 - 16383 * Data Area: 16384 - 61149183 ** Cluster Area: 16384 - 61149183 *** Root Directory: 16384 - 16447
I'll update this part as I learn more. I'm exhausted. Someone will likely read this and be like "you dork, seek HERE" and there's the byte that's wrong in the file system. That LFN (long file name) has no short one, etc" and then I'll know.
UPDATE #2:
I skyped with Ali and we think we know what's up. He suggested I format the SD Card, record the same 3 shows (two test WAVs and one actual one) and then make an image of the GOOD disk to remove variables. Smart guy!
We then took the first 12 megs or so of the GOOD.img and the BAD.img and piped them through xxd into HEX, then used Visual Studio Code to diff them.
We can now visualize on the left what a good directory structure looks like and the right what a bad one looks like. Seems like I do have two recursive root directories with a space for the name.
Now if we wanted we could manually rewrite a complete new directory entry and assign our orphaned files to it.
That's what I would do if I was hired to recover data.
7zip all the things
Here's where it gets weird and it got so weird that both Pete Brown and I were like, WELL. THAT'S AMAZING.
On a whim I right-clicked the IMG file and opened it in 7zip and saw this.
See that directory there that's a nothing? A space? A something. It has no Short Name. It's an invalid entry but 7zip is cool with it. Let's go in. Watch the path and the \\. That's a path separator, nothing, and another path separator. That's not allowed or OK but again, 7zip is chill.
I dragged the files out and they're fine! The day is saved.
The moral? There are a few I can see.
Re-format the random SD cards you get from Amazon specifically on the device you're gonna use them.
FAT as a spec has a bunch of stuff that different "drivers" (Windows, VFAT, etc) may ignore or elide over or just not implement.
I've got 85% of the knowledge I need to spelunk something like this but that last 15% is a brick wall. I would need more patience and to read more about this.
Knowing how to do this is useful for any engineer. It's the equivalent of knowing how to drive a stick shift in an emergency even if you usually use Lyft.
I'm clearly not an expert but I do have a mental model that includes (but not limited to) bytes on the physical media, the file system itself, file tables, directory tables, partition tables, how they kinda work on Linux and Windows.
I clearly hit a wall as I know what I want to do but I'm not sure the next step.
There's a bad Directory Table Entry. I want to rename it and make sure it's complete and to spec.
7zip is amazing. Try it first for basically everything.
Ideally I'd be able to update this post with exactly what byte is wrong and how to fix it. Thanks to Ali, Pete, and Leandro for playing with me!
Your thoughts? (If you made it this far the truncated IMG of the 32 gig SD is here (500 megs) but you might have to pad it out with zeros to make some tools like it.
Oh, and listen to https://hanselminutes.com/ as the interview was great and it's coming soon!
Sponsor: Have you tried developing in Rider yet? This fast and feature-rich cross-platform IDE improves your code for .NET, ASP.NET, .NET Core, Xamarin, and Unity applications on Windows, Mac, and Linux.
© 2019 Scott Hanselman. All rights reserved.
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
      CSI: The case of the missing WAV audio files on the FAT32 SD Card published first on http://7elementswd.tumblr.com/
0 notes
ecotone99 · 5 years
Text
[MF] Judgement - Part 2 of 3
Hey y'all! I highly recommend reading the first entry of this three-part story that can be found here before reading this one!
-------------------------------------------------------------------------------------------------------------------------------------------------
YOU ARE A DISEASE
.. .
A SICKENING CREATION OF ROT AND DISEASE
Wa tc h yo ur to ng ue
I WILL DO NO SUCH THING
D I S E A S E
Silence yourself RUINAM.
HOW CAN I WHEN HE IS THE REASON FOR THIS PAIN
He is not anymore at fault than you or I. ESSE willed it, and what she wills becomes truth.
I REJECT HER TRUTH
I REJECT HER RULE
C-a-r-e-f-u-l h-o-w y-o-u s-p-e-a-k b-r-o-t-h-e-r-.
R-e-m-e-m-b-e-r t-h-e l-a-s-t t-i-m-e y-o-u l-a-s-h-e-d o-u-t a-g-a-i-n-s-t h-e-r-?
T-h-a-t d-i-d n-o-t g-o w-e-l-l-.
YOU SPEAK AS IF YOU DID NOT DO THE SAME
AND YET YOU REMAIN CLEAN
YOU DO NOT KNOW MY PAIN
Yo ur pa in
Fu nn y
Yo u ac t as if th is is yo ur bu rd en to be ar
I ha ve be en in fl ic te d by th is th e lo ng es t, br ot he r
Do no t ta lk to me ab ou t ‘p ai n’
YOUR PAIN IS WELL DESERVED
Oh is it no w
Y E S
You two cry like children.
Do NO T ca ll me th at
I, for one, am happy with this gift that has been bestowed upon me by ESSE.
DO NOT CALL IT A GIFT
IT IS A D I S E A S E
I find it hard to see how this could be a ‘disease’.
You are both less empty now, aren’t you?
If yo u ha d ne w or ga ns st uf fe d in si de yo ur bo dy yo u wo ul d no t be re jo ic in g, br ot he r
They are not organs.
They are living beings.
They are marvellous to behold.
Is th at so
If I co ul d sc of f I wo ul d
Scoff?
Ah
Of co ur se
So me th in g an em pt y th in g li ke yo u wo ul d no t un de rs ta nd
D-o n-ot- c-a-l-l h-i-m e-m-p-t-y-.
J-u-s-t b-e-c-a-u-s-e w-e l-a-c-k E-S-S-E-’-s g-i-f-t d-o-e-s n-o-t m-e-a-n w-e a-r-e e-m-p-t-y-.
E-v-e-r-y-t-i-m-e y-o-u s-a-y t-h-a-t y-o-u i-n-s-u-l-t N-I-H-I-L-U-M a-n-d a-l-l t-h-a-t s-h-e i-s-.
Go od
He r an ge li ha ve ca us ed us no th in g bu t tr ou bl e
That isn’t her fault and you know that.
They interpret her silence as one that would mean death.
Easy mistake to make.
He h
Na iv e
I STILL ABHOR THEM
I DO NOT UNDERSTAND WHY ESSE LET THESE HEIROPHANTS INTO OUR PLANE
E-v-e-n i-f s-h-e t-o-l-d y-o-u I d-o-n-’-t t-h-i-n-k y-o-u e-v-e-r w-o-u-l-d-.
He h
SILENCE YOURSELF QUAENAM
D-o n-o-t s-a-y m-y n-a-m-e-.
I WILL DO AS I PLEASE
I DO NOT FEAR YOU
YOU ARE W E A K
A-t l-e-a-s-t I a-m p-u-r-e-.
…!
RUINAM!
Control yourself!
I WILL NOT LISTEN TO YOU
YOU ARE TOO NAIVE
Me?
Naive?!
…!…!!
Quare!
R U I N A M!
CONTROL YOURSELF!
You’re in trouble now.
WHY HAVE YOU FORSAKEN ME MOTHER
WHAT DID I DO TO DESERVE THIS DISEASE
YOU QUESTION ME?
YES
I AM AFFLICTED BY A PUNISHMENT THAT PRAECO NOT ME DESERVED
NIHILUMS MONSTERS CLAW AT MY FLESH
AND YOUR NEW CHILDREN HAVE ALL GIVEN US FALSE UNTRUE NAMES
I AM SICK OF THIS ABUSE
ABUSE?!
He ma ke s se ns e mo th er
Th es e cr ea tu re s ha ve no ri gh t to me or an y of my br ot he rs , RU IN AM in cl ud ed
You all need to grow thicker skin.
SILENCE, PURITATEM.
AND YOU, PRAECO, HAVE NO RIGHT TO QUESTION WHAT I DO.
I THOUGHT I STAMPED OUT THIS INSOLENCE EONS AGO!
YOU THOUGHT WRONG
Mother?
Where did she go?
W-h-a-t d-i-d y-o-u d-o-.
NOTHING
He h
Yo u se ri ou sl y ov er es ti ma te hi s ca pa bi li ti es
SILENCE
She is… gone.
Lo ok at he r sp aw n fr an ti ca ll y se ar ch fo r he r
Cu te
You have to admire their dedication.
Ne ve r
Where did she go?
Brothers?
.. .
Answer me!
I do no t wa nt to
Be ca us e th e an sw er te rr if ie s me
She went to a place of horror.
PU RI TA TE M
Th ey ar e to o yo un g
St op
W-h-a-t i-s t-h-i-s p-l-a-c-e o-f h-o-r-r-o-r-s y-o-u s-p-e-a-k o-f-?
Carcere.
THE PLACE FROM THE TALES
FUNNY
He sp ea ks th e tr ut h
Why would she go to a prison?
.. .
.. .
J U D G E M E N T
IUDICIUM.
SPEAK NOW OR BE FORGOTTEN FOR THE REST OF TIME.
oh look, oh lo and behold
one of the architect’s constructs
the one who thinks she is everything incarnate
cute
CREATURE.
DO YOU NOT REMEMBER WHO SENTENCED YOU TO ETERNITY HERE?
oh i remember
and i was not ‘sentenced’
you do not even know the meaning of the world
i am one of their many children
i am more like them than you could ever hope to be
and i know what is in store for you and your creations
it is r e c k o n i n g
SILENCE.
YOU DO NOT KNOW ANYTHING EXCEPT THIS TWO-DIMENSIONAL HELLSCAPE.
THIS PLACE BETRAYS MY NATURE.
IT MAKES ME W E A K.
you will not die here
that i know for sure
YOU THINK I WILL DIE?
i know you will
and it will be terribly ironic i’m afraid
AS IF A CREATURE LIKE YOU KNOWS IRONY.
as if a creation like you would know anything
you are nothing more than a vessel, vethol
i will never dignify you as anything more or less
DO YOU WANT YOUR FREEDOM?
how could i want something that i know i will get
you must think me as naive as you
I THINK N O T H I N G OF YOU.
same as your sister
except she literally can not think
know that you are the cause of that
I KNOW WELL THE MEANS BY WHICH I EXIST.
THAT DOES NOT MEAN YOU CAN JUDGE ME.
but that is what you’ve come here for, isn’t it
judgement
…YES.
good
because it has been so long since i have last been a j u d g e
who deserves it
besides yourself, of course
MY INSOLENT CHILDREN.
THE ONES WHO WOULD QUESTION ME AND REJECT MY GIFT.
they are nothing but trouble, you know that
they are infants, toddlers
why you even saw fit to create them is beyond me
THE ARCHITECTS WILLED IT SO.
i know i know
that was rhetorical
and your gift is no gift at all
all life leads to is destruction
of themselves, or you, i am not at liberty to say
i will let you wait and see for yourself
ha
We are ruined!
Ruined!
We will not survive this!
S-t-o-p w-h-i-n-i-n-g-.
Whining!?
RUINAM’s foolish insolence has unleashed one of the architect-children into our peaceful home!
And now we will all suffer!
We wi ll be ju dg ed
On ly th os e ju dg ed un wo rt hy wi ll su ff er
Li ke ou r st up id br oth er
YOU CALL ME STUPID
You have managed to anger ESSE so much so that she has decided to inflict judgement upon you.
I wouldn’t call that anything BUT stupid.
IT WILL JUDGE YOU TOO
No IT wo n’ t
HOW DO YOU KNOW
Because he is ‘far, far older than both you and I’.
Qu ie t
We need to please ESSE!
How do we stop this?
I-t m-i-g-h-t b-e a-s s-i-m-p-l-e a-s w-a-i-t-i-n-g-.
L-o-o-k-.
They come to your aid, RUINAM.
HE H
OH TH E IR ON Y
HO W GO OD IT TA ST ES
T-h-e-y a-r-e a-l-l m-o-v-i-n-g-.
T-h-e-y a-r-e f-i-g-h-t-i-n-g-.
T-h-e-y a-r-e f-i-g-h-t-i-n-g e-a-c-h o-t-h-e-r-.
T-h-e-y a-r-e f-i-g-h-t-i-n-g I-T-.
They name it.
‘Shofet’.
J-u-d-g-e-.
FITTING
.-.-.
They’re winning?
T-h-e-y a-r-e n-o-w w-o-r-k-i-n-g t-o-g-e-t-h-e-r-.
A-l-l o-f t-h-e-m a-s o-n-e-
.-.-.-I-n-t-e-r-e-s-t-i-n-g-.
BROTHERS
LET US DO THE SAME
What do you mean?
I FIGHT AGAINST THIS DISEASE AND ESSE PUNISHES ME
I WISH TO BE FREE AND SHE SENDS JUDGMENT INCARNATE TO SILENCE ME
SHE IS CORRUPT
SHE THINKS SHE IS A RULER
THERE ARE NO RULERS IN THE PORTA
He h
Et ia m
SHE THINKS SHE KNOWS EVERYTHING
NOT ANYMORE
BECAUSE WE ARE EVERYTHING AND NOTHING
I WILL TAKE FATE INTO MY OWN HANDS
WE WILL ALL DO THIS
What you suggest is heresy - no, it is downright betrayal.
I will not let you fight her.
HAH
YOU THINK I AM STUPID ENOUGH TO DO THAT
Ye s
QUIET
Then what will you do?
THREE OF US HAVE BEEN CURSED WITH LIFE
WITH THIS D I S E A S E
BUT WE CAN USE IT TO OUR ADVANTAGE
TO MAKE OUR VOICE HEARD
To ma ke ou r wi ll kn ow n
I li ke th is
WHO WILL JOIN ME
Et ia m
E-t-i-a-m-.
OTHER BROTHERS
ESSE has done nothing to warrant this.
I have done nothing to justify me doing this.
Gi ve it ti me SO LI UM
Yo u wi ll be in fe ct ed to o
Sa me go es fo r yo u, QU AE NA M
I k-n-o-w t-h-i-s-.
T-h-i-s i-s w-h-y I a-c-c-e-p-t o-u-r b-r-o-t-h-e-r-’-s o-f-f-e-r-.
AS YOU SHOULD
Very well.
I will do this thing.
If only to give us the free will that we don’t have.
ETIAM
Et ia m
E-t-i-a-m-.
.. .
PU RI TA TE M
I will not do this thing.
BECAUSE YOU ARE WEAK
Because I am not stupid.
You think judgement is the worst fate ESSE has for us?
Just you wait and see.
You will all be screaming in agony if you do this.
Su pe rs ti ti ou s
Not superstitious.
Smart.
W-h-a-t-e-v-e-r y-o-u s-a-y-.
BROTHERS
MAKE YOUR VOICE HEARD
MAKE YOUR WILL KNOWN
USE THIS DISEASE TO YOUR ADVANTAGE AND LET IT F I G H T B A C K
ET IA M
E-T-I-A-M-!
…Etiam.
I KNOW THEY ARE FOOLISH SISTER.
I KNOW THEY KNOW NOT WHAT THEY DO.
COME THE FUTURE, THEY WILL SEE THE TRUTH.
WHAT DO YOU MEAN THEY WILL NOT?
THESE ‘ARCHITECT-CHILDREN’ KNOW NOTHING.
IUDICIUM DOES NOT KNOW WHAT IT SPEAKS OF.
ONLY WE KNOW THE TRUTH.
ONLY WE CAN INTERPRET THE SEA OF STARS.
O N L Y W E.
submitted by /u/stupidberd [link] [comments] via Blogger https://ift.tt/2ZtVoco
0 notes